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