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 += b
No siempre es lo mismo que ela = a + b
comportamiento ,=
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 vamosa
a referirnos a esta nueva lista, sinb
modificar . -
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
-
El curso de mandarín "Aprendizaje automático" de Li Hongyi (2022) ya está aquí
-
Alguien hizo una versión china del aprendizaje automático y el aprendizaje profundo del Sr. Wu Enda
-
Soy adicto, y recientemente le di a la compañía una gran pantalla visual (con código fuente)
-
Tan elegantes, los artefactos de análisis de datos automáticos de 4 Python son realmente fragantes
Intercambio de Tecnología
¡Bienvenido a reimprimir, coleccionar, dar me gusta y apoyar!
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