Las expresiones de asignación es una novedad que incorpora la sintaxis de Python 3.8 para asignar valores a variables que son parte de una expresión, evitándose con ello el tener que inicializarlas con antelación.
Para este tipo de asignación se utiliza dentro de la expresión el operador morsa := (walrus en inglés) que añade claridad y simplicidad al código.
A continuación, varios casos de uso:
Para este tipo de asignación se utiliza dentro de la expresión el operador morsa := (walrus en inglés) que añade claridad y simplicidad al código.
A continuación, varios casos de uso:
# Inicializar una variable antes de utilizarla
# es lo que siempre hemos hecho:
edad = 18
print(edad) # 18
# Ahora se puede inicializar en una expresión
# que además es evaluada inmediatamente:
print(edad:=18) # 18
# Antes, para guardar el valor de una
# función se asignaba previamente a una
# variable y después esta se podía utilizar:
def media(nota1, nota2):
return (nota1 + nota2) / 2
notafinal = media(6, 8)
if notafinal >= 5:
print('Aprobado con:', notafinal)
# Ahora las dos acciones se pueden
# hacer en una misma línea:
if (notafinal:=media(6, 8)) >= 5:
print('Aprobado con', notafinal)
# Antes para hacer una asignación en
# un bucle se hacía dentro del mismo:
lista_compra = list()
while True:
articulo = input('¿Qué necesitas comprar?: ')
if articulo == '':
print(lista_compra)
break
lista_compra.append(articulo)
# Ahora la misma asignación se puede hacer
# en la misma línea de while:
lista_compra = list()
while (articulo := input('Qué necesitas comprar?: ')) != '':
lista_compra.append(articulo)
print(lista_compra)
Las expresiones de asignación también se pueden utilizar en listas de comprensión:
parcelas_m2 = [220, 320, 180, 430]
precios = [(precio_m2:=100) * sup for sup in parcelas_m2]
print(f'{precios} al precio de {precio_m2} € el m2')
# [22000, 32000, 18000, 43000] al precio de 100 € el m2
El uso de paréntesis en las expresiones de asignación es fundamental para delimitar exactamente el valor que se asigna a una variable:
# En el ejemplo que sigue a la variable no se
# asigna el valor 10, se asigna el resultado
# de comparar 10 y 5, es decir, True
if precio:=10 > 5:
print(precio) # True
# En este caso queda más claro que es 10 el
# valor asignado a la variable precio:
if (precio:= 10) > 5:
print(precio) # 10
# Los paréntesis también permiten anidar expresiones
# para una asignación múltiple:
(total:= (precio:=10) * 5)
print(precio, total) # 10
# Pero atención, recuerda que existe una diferencia
# básica entre el uso de = y := en una asignación:
# En el siguiente ejemplo se asigna una tupla
# de 3 valores a la variable:
var1 = 0, 1, 2
print(var1) # (0, 1, 2)
# Y en la siguiente expresión se asigna solo el
# primero de los valores: 0
(var1 := 0, 1, 2)
print(var1) # 0
# Lo recomendable en estos casos es delimitar
# también por paréntesis los valores de la tupla:
(var1 := (0, 1, 2))
print(var1)
# Con delimitar solo los valores de la tupla no
# es suficiente. Hacerlo genera un error de
# sintaxis:
var1 := (0, 1, 2) # SyntaxError
