Esos aplaudiendo el código de Python

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; antes de que comience cada iteración, el siguiente elemento producido por el iterador (rango (4) en este caso) se desempaqueta y se asigna al objetivo. La 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:

  • Cuando se ejecuta return, break o continue en el intento de una instrucción "try...finally", la cláusulafinal todavía se ejecuta.

  • El valor de retorno de una 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 += bNo siempre es lo mismo que el a = a + bcomportamiento , =la forma en que la clase implementa el operador puede ser diferente, y eso es lo que hacen las listas.

  • a = a + [5,6,7,8]expresión genera una nueva lista, y vamos aa referirnos a esta nueva lista, sin bmodificar .

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

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!

artículo recomendado

Intercambio de Tecnología

¡Bienvenido a reimprimir, coleccionar, dar me gusta y apoyar!

inserte la descripción de la imagen aquí

En la actualidad, se ha abierto un grupo de intercambio técnico, con más de 2000 miembros . La mejor manera de comentar al agregar es: fuente + dirección de interés, que es conveniente para encontrar amigos afines.

  • Método 1. Envíe la siguiente imagen a WeChat, mantenga presionada para identificarla y responda en segundo plano: agregar grupo;
  • Método ②, agregar microseñal: dkl88191 , nota: de CSDN
  • Método ③, cuenta pública de búsqueda de WeChat: aprendizaje de Python y extracción de datos , respuesta en segundo plano: agregar grupo

pulsación larga seguir

Supongo que te gusta

Origin blog.csdn.net/weixin_38037405/article/details/123912989
Recomendado
Clasificación