Código Python que hace gritar a la gente

Python es un lenguaje de alto nivel interpretado bellamente diseñado que proporciona muchas características que hacen que los programadores se sientan cómodos. Pero a veces, algunos resultados de salida de Python pueden no parecer tan obvios para los principiantes.

Si eres un programador de Python con más experiencia, puedes probar el desafío para ver si puedes ver el resultado de la operación de un vistazo.

ejecutar solo una vez?

¿Cuántas veces se ejecutará el siguiente código?

for i in range(4):
    print(i)
    i = 10

Después de ejecutar, salida:

0
1
2
3

¿Qué, no es salida  0 ?

Análisis de principio:

  • Debido a la forma en que funcionan los bucles en Python, la declaración de asignación i = 10 no afecta el bucle iterativo, el siguiente elemento producido por el iterador (rango (4) en este caso) se desempaqueta y se asigna al objetivo antes de que comience cada iteración. variable de la lista (aquí i).

hachís de truco o trato

some_dict = {}
some_dict[5.5] = "Ruby"
some_dict[5.0] = "JavaScript"
some_dict[5] = "Python"
print(some_dict[5.5])
print(some_dict[5.0])
print(some_dict[5])

Salida después de ejecutar:

Ruby
Python
Python

Análisis de principio:

  • Los diccionarios de Python determinan si dos claves son iguales comprobando si los valores de las claves son iguales y comparando los valores hash.

  • Cuando se ejecuta la declaración some_dict[5] = "Python", el valor existente "JavaScript" se sobrescribe con "Python" porque Python reconoce 5 y 5.0 como la misma clave en some_dict

volver a todas partes

def some_func():
    try:
        return 'from_try'
    finally:
        return 'from_finally'

print(some_func())

Salida después de ejecutar:

from_finally

¿no es así  from_try ?

Análisis de principio:

  • La cláusula finalmente aún se ejecuta cuando se ejecuta return, break o continue en el intento de una instrucción "intentar... finalmente".

  • El valor de retorno de la función está determinado por la última instrucción de retorno ejecutada. Dado que la cláusulafinal definitivamente se ejecutará, el retorno en la cláusulafinal siempre será la última instrucción ejecutada.

ni ni ni

print('something' is not None)
print('something' is (not None))

resultado de la operación:

True
False

Análisis de principio:

  • is not es un operador binario separado, en lugar de usar is y not por separado.

  • El resultado de no es es falso si las variables a ambos lados del operador apuntan al mismo objeto; de lo contrario, el resultado es verdadero.

De la existencia a la nada

some_list = [1, 2, 3]
some_dict = {
    "key_1": 1,
    "key_2": 2,
    "key_3": 3
}
some_list = some_list.append(4)
some_dict = some_dict.update({"key_4": 4})
print(some_dict)
print(some_list)

resultado de la operación:

None
None

Análisis de principio:

  • La mayoría de los métodos que modifican objetos de secuencia/mapa, como list.append, dict.update, list.sort, etc., modifican el objeto en su lugar y devuelven None.

Misma persona diferente vida

Primero veamos un fragmento de programa:

a = [1, 2, 3, 4]
b = a
a = a + [5, 6, 7, 8]
print(a)
print(b)

Resultado después de correr:

[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4]

Veamos otro fragmento de programa:

a = [1, 2, 3, 4]
b = a
a += [5, 6, 7, 8]
print(a)
print(b)

Resultado después de correr:

[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]

De acuerdo con la comprensión convencional, ¿los resultados devueltos por estos dos fragmentos de programa deberían ser los mismos?

Análisis de principio:

  • a += b No siempre es lo  a = a + b mismo que la representación, la forma en que la clase implementa el operador operator  = puede ser diferente, y eso es lo que hacen las listas.

  • La expresión  a = a + [5,6,7,8] produce una nueva lista y hace  a referencia a esta nueva lista, sin  b modificarla.

  • La expresión  a += [5,6,7,8] en realidad usa la función "extender", por lo que la  a suma  b aún apunta a la misma lista que se ha modificado.

Resumir

Después de leer los resultados de ejecución de estos códigos, ¿llamó directamente a WC? ¡Dale un pulgar arriba si tienes uno!

Es probable que incluso un veterano de Python esté fascinado con este código, es difícil tener toda la razón. Estos códigos son como preguntas de lógica en las pruebas de línea, ¡y es fácil confundirse con la superficie! Pero después de ejecutar, mira el principio, ¡también es muy útil para nosotros aprender Python!

Aquí me gustaría recomendar el grupo Q de aprendizaje de Python que construí yo mismo: 831804576. Todos en el grupo están aprendiendo Python. Si quieres aprender o estás aprendiendo Python, eres bienvenido a unirte. Todos son un grupo de desarrollo de software y comparten productos secos de vez en cuando (solo relacionado con el desarrollo de software de Python),
incluida una copia de los últimos materiales avanzados de Python y enseñanza basada en cero en 2021 que he compilado yo mismo. Bienvenidos a los socios medianos y pequeños avanzados que están interesados ​​en ¡Pitón! 

Supongo que te gusta

Origin blog.csdn.net/BYGFJ/article/details/124140392
Recomendado
Clasificación