"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Preguntas complicadas sobre Python

Preguntas complicadas sobre Python

Publicado el 2024-07-29
Navegar:588

En los últimos dos años, he estado usando Python como mi lenguaje de programación principal. Pensé que tal vez sea una buena razón para "profundizar" como lo hice en Preguntas difíciles de JavaScript. Algunas de las siguientes preguntas eran cuestiones que necesitaba abordar en mi trabajo actual, otras estaban inspiradas en la web.

Entonces, ¿estás listo para dejarte boquiabierto (por la pregunta de Python)?

Tricky Python Questions

Preguntas

¡Aviso 1!: Para cada pregunta, hay una respuesta con una explicación (enlace debajo de cada elemento).
¡Aviso 2!: Para cada pregunta, piense cuál será el resultado.

Pregunta 1
exapmle_dict = dict()
exapmle_dict.a = "string"
print(exapmle_dict)

Ir a la respuesta 1

Pregunta 2
class Json:
    def __init__(self, *args, **kwargs):
        import json

    def print_dict_as_json(self, obj):
        print(json.dumps(obj))

example_json = Json()
example_json.print_dict_as_json({"a": "string"})

Ir a la respuesta 2

Pregunta 3
def myFun(arg1, arg3, **kwargs):
    for key, value in kwargs.items():
        print("%s == %s" % (key, value))


my_dict = {'arg1':1, 'arg2': 2}
myFun(**my_dict, arg3=3)

Ir a la respuesta 3

Pregunta 4
def add_to_all_1(arr):
    for i in range(len(arr)):
        arr[i]  =1

def my_func():
    arr = [1,2,3]
    add_to_all_1(arr)
    arr2 = arr
    print(arr2)

my_func()

Ir a la respuesta 4

Respuestas

Respuesta a la pregunta 1

Si tú dijiste:

{"a": "string"}

lamentablemente estás equivocado, la respuesta es:

AttributeError: 'dict' object has no attribute 'a'

Si te gusto y viniste primero desde javascript, el diccionario de acceso (objeto en Javascript) no es por punto como en Javascript, puedes acceder solo por [], y dentro de la clave quieres establecer "a".

Volver a la pregunta 1

Respuesta a la pregunta 2

Si tú dijiste:

{"a": "string"}

Otra vez te equivocas, la respuesta es:

...
NameError: name 'json' is not define

Es posible que conozcas las diferencias entre el alcance local y global en Python (si no, deberías leer esto: Python Scope). __init__ es una función , la importación se realiza dentro de un ámbito local, por lo que no sabe qué es json. Puedes solucionarlo importándolo globalmente de esta manera:

import json

class Json:
    def print_dict_as_json(self, obj):
        print(json.dumps(obj))

example_json = Json()
example_json.print_dict_as_json({"a": "string"})

O de forma más avanzada:

class Json:
    import json as json
    def print_dict_as_json(self, obj):
        print(self.json.dumps(obj))

example_json = Json()
example_json.print_dict_as_json({"a": "string"})

Puedes ver cómo usar la importación dentro de la clase para obtener más detalles.

Volver a la pregunta 2

Respuesta a la pregunta 3

Si tú dijiste:

arg2 == 2

¡Tienes razón! En Python, tenemos 3 formas de pasar un argumento:

  • Por el argumento mismo:
def myFun(arg1):
   print(arg1)

myFun('arg1')
  • Por *args - lista o tuplas de argumentos (nos permite pasar un número variable de argumentos que no son palabras clave a una función de Python):
def myFun(*arg1):
   print(*arg1)

my_tuple = ('arg1', 'arg2')
myFun(my_tuple)
  • Por kwargs puede pasar argumentos clave=valor (kwargs nos permite pasar un número variable de argumentos de palabras clave a una función de Python), como en la pregunta. Si quieres leer más sobre el tema puedes leer aquí: freecodecamp - Cómo usar *args y **kwargs en Python

Volver a la pregunta 3

Respuesta a la pregunta 4

La respuesta es:

[2, 3, 4]

Para algunas personas que conocen los alcances y las asignaciones, puede parecer una pregunta bastante fácil. Para aquellos que no lo saben, Python guarda la memoria variable como referencia, por lo que en este caso, arr apuntará a una referencia en una memoria -> la función cambiará los valores (pero seguirá siendo la misma referencia) -> arr2 obtiene la dirección de referencia de arr pero después de que se modificaron los valores.

Volver a la pregunta 4

Gracias por leer este artículo. Espero que hayas disfrutado y aprendido cosas nuevas. Si tienes alguna pregunta o sugerencia, por favor deja un comentario.

Declaración de liberación Este artículo se reproduce en: https://dev.to/tomeraitz/tricky-python-questions-45gg?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3