Cómo usar expresiones de asignación en Python

1 mar 2021 5 min di lettura
Cómo usar expresiones de asignación en Python
Indice dei contenuti

Introducción

Python 3.8, lanzado en octubre de 2019, agrega expresiones de asignación a Python usando la sintaxis :=. La sintaxis de la expresión de asignación a veces también se llama "el operador de morsa" porque := se parece vagamente a una morsa con colmillos.

Las expresiones de asignación permiten la asignación de variables dentro de expresiones más grandes. Si bien las expresiones de asignación nunca son estrictamente necesarias para escribir código Python correcto, pueden ayudar a que el código Python existente sea más conciso. Por ejemplo, las expresiones de asignación que usan la sintaxis := permiten asignar variables dentro de las if, que a menudo pueden producir secciones más cortas y compactas de código Python al eliminar las asignaciones de variables en las líneas antes o después de la if.

En este tutorial, usará expresiones de asignación en varios ejemplos para producir secciones de código concisas.

Prerrequisitos

Para aprovechar al máximo este tutorial, necesitará:

  • Python 3.8 o posterior. Las expresiones de asignación son una nueva característica agregada a partir de Python 3.8. Puede ver los tutoriales de Python en esta dirección.
  • Cierta familiaridad con while los bucles, if, lista de acuerdos, y funciones en Python 3 son útiles, pero no es necesario.

Usar expresiones de asignación en declaraciones if

Comencemos con un ejemplo de cómo puede usar expresiones de asignación en una instrucción if

Considere el siguiente código que verifica la longitud de una lista e imprime una declaración:

some_list = [1, 2, 3]
 if (list_length:= len(some_list)) > 2:
 print("List length of", list_length, "is too long")

Si ejecuta el código anterior, obtendrá el siguiente resultado:

List length of 3 is too long

Inicializa una lista denominada some_list que contiene tres elementos. Luego, la if usa la expresión de asignación ((list_length:= len(some_list)) para vincular la variable llamada list_length a la longitud de some_list. La if devuelve True porque list_length es mayor que 2 Imprime una cadena usando la variable list_length, que inicialmente se asoció con la expresión de asignación, lo que indica que la lista de tres elementos es demasiado larga.

Nota: LasPython 3.8

Si no hubiéramos usado la expresión de asignación, nuestro código podría haber sido un poco más largo. Por ejemplo:

some_list = [1, 2, 3]
 list_length = len(some_list)
 if list_length > 2:
 print("List length of", list_length, "is too long")

Este ejemplo de código es equivalente al primer ejemplo, pero este código requiere una línea independiente adicional para asignar el valor de list_length a len(some_list).

Otro ejemplo de código equivalente podría ejecutar len(some_list) dos veces: una vez en la if y una vez en la print. Esto evitaría encontrarse con la línea adicional requerida para vincular una variable al valor de len(some_list):

some_list = [1, 2, 3]
 if len(some_list) > 2:
 print("List length of", len(some_list), "is too long")

Las expresiones de asignación ayudan a evitar la fila adicional o el cálculo doble.

Nota: Las

En la siguiente sección, vamos a explorar el uso de expresiones de asignación dentro while bucles.

Usar expresiones de asignación en bucles while

Expresiones de asignación menudo funcionan bien en while los bucles, ya que nos permiten poner más contexto a la condición del bucle.

Consideremos el siguiente ejemplo la incrustación de una input función dentro del while condición de bucle:

while (directive:= input("Enter text: "))!= "stop":
 print("Received directive", directive)

Si ejecuta este código, Python le pedirá continuamente que ingrese texto desde el teclado hasta que escriba la palabra stop. Una sesión de ejemplo podría verse así:

>>> while (directive:= input("Enter text: "))!= "stop":... print("Received directive", directive)...
 Enter text: hello
 Received directive hello
 Enter text: example
 Received directive example
 Enter text: stop
 >>>

La expresión de asignación (directive:= input("Enter text: ")) vincula el valor de la directive al valor recuperado por el usuario a través de la función de input Asociar el valor de retorno con la directive variable, que se imprime en el cuerpo del while de bucle. El while bucle termina cada vez que escriba stop.

Si no hubiera utilizado una expresión de asignación, es posible que haya escrito un bucle de input

directive = input("Enter text: ")
 while directive!= "stop":
 print("Received directive", directive)
 directive = input("Enter text: ")

Este código es funcionalmente idéntico al de las expresiones de asignación, pero requiere cuatro líneas en total (en lugar de dos líneas). También duplica la input("Enter text: ") en dos lugares. Por supuesto, hay muchas formas de escribir un while, pero la variante de la expresión de asignación presentada anteriormente es compacta y captura bien la intención del programa.

Hasta ahora, usted ha estado utilizando expresiones de asignación en if y while bucles. En la siguiente sección, usará una expresión de asignación dentro de una lista de comprensión.

Usar expresiones de asignación en entendimientos de listas

También podemos usar expresiones de asignación en la comprensión de listas. Comprender las listas le permite crear listas de manera sucinta iterando sobre una secuencia y potencialmente agregando elementos a la lista que cumplen con ciertas condiciones. Al igual que la comprensión de las listas, podemos usar expresiones de asignación para mejorar la legibilidad y hacer que nuestro código sea más conciso.

Considere el siguiente ejemplo que usa una comprensión de lista y una expresión de asignación para crear una lista de números enteros multiplicados:

def slow_calculation(x):
 print("Multiplying", x, "*", x)
 return x * x

 [result for i in range(3) if (result:= slow_calculation(i)) > 0]

Si ejecuta el código anterior, recibirá lo siguiente:

Multiplying 0 * 0
 Multiplying 1 * 1
 Multiplying 2 * 2
 [1, 4]

Definimos una función llamada slow_calculation que multiplica el número dado x por sí mismo. Luego, se repitió una lista de comprensión a través de 0, 1 y 2 devueltos por range(3). Una expresión de asignación vincula el result del valor al retorno de slow_calculation con i. Agregue el result a la lista recién creada, siempre que sea mayor que 0. En este ejemplo, 0, 1 y 2 son todos múltiplos de sí mismos, pero solo los resultados 1 ( 1 * 1 ) y 4 ( 2 * 2 ) satisfacen la condición mayor que 0 y pasan a formar parte de la lista final [1, 4].

La slow_calculation lento no es necesariamente lenta en términos absolutos, pero está destinada a ilustrar un punto importante sobre la eficiencia. Considere una implementación alternativa del ejemplo anterior sin expresiones de asignación:

def slow_calculation(x):
 print("Multiplying", x, "*", x)
 return x * x

 [slow_calculation(i) for i in range(3) if slow_calculation(i) > 0]

Al ejecutarlo, recibirá el siguiente resultado:

Multiplying 0 * 0
 Multiplying 1 * 1
 Multiplying 1 * 1
 Multiplying 2 * 2
 Multiplying 2 * 2
 [1, 4]

En esta variación del código anterior, no usa expresiones de asignación. En su lugar, slow_calculation hasta dos veces: una vez para asegurarse de que slow_calculation(i) sea mayor que 0 y potencialmente una segunda vez para agregar el resultado del cálculo a la lista final. 0 se multiplica por sí mismo una vez porque 0 * 0 no es mayor que 0. Los otros resultados, en cambio, se calculan doblemente porque satisfacen la condición mayor que 0, por lo que los resultados se recalculan para formar parte de la lista final [1, 4].

Ha combinado expresiones de asignación con comprensión de listas para crear bloques de código eficientes y concisos.

Conclusión

En este tutorial, usó expresiones de asignación para crear secciones compactas de código Python que asignan valores a variables dentro de if while bucles while y comprensiones de listas.

Para obtener más información sobre otras expresiones de asignación, puede ver PEP 572, el documento que inicialmente propuso agregar expresiones de asignación a Python.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.