Compreendendo expressões de atribuição no Python 3.8
Desde o Python 3.8, o operador "walrus" (:=) introduziu expressões de atribuição na linguagem. Este novo recurso permite que os programadores atribuam valores dentro de compreensões e funções lambda, que anteriormente eram restritas a atribuições regulares. código eficiente em cenários onde as atribuições tradicionais não são suportadas. Por exemplo, expressões de atribuição facilitam:
Aquisição de valor condicional
: Valores condicionais podem ser obtidos de forma mais sucinta, conforme demonstrado pelo exemplo de depuração interativo fornecido na documentação do Python.
- Compreensões de lista simplificadas: compreensões de listas complexas podem ser simplificadas atribuindo valores intermediários a variáveis dentro da compreensão, tornando o código mais legível e gerenciável.
- Sintaxe, Semântica, e Gramática
As expressões de atribuição seguem uma sintaxe específica: name := expr, onde name é um identificador e expr é qualquer expressão Python válida. O valor da expressão de atribuição é o mesmo que a expressão expr, mas um efeito colateral adicional atribui o valor ao nome de destino.
As expressões de atribuição diferem das instruções de atribuição regulares em vários aspectos principais:
Eles são expressões, não declarações e, portanto, podem aparecer em contextos onde as expressões são esperadas.
Eles têm uma ordem de avaliação diferente (da direita para a esquerda) e uma precedência diferente em comparação com atribuições regulares.
- Eles não suportam múltiplos destinos, atribuições para nomes não únicos, empacotamento/desempacotamento iterável, anotações de tipo in-line ou operações de atribuição aumentadas.
- Motivos para a introdução de expressões de atribuição
- Apesar da retirada do PEP 379, que propunha um conceito semelhante, o PEP 572 introduziu expressões de atribuição no Python por vários motivos:
Para melhorar a legibilidade e manutenção do código, especialmente dentro da compreensão e lambdas.
Para permitir a depuração interativa sem a necessidade de refatoração de código.
- Para fornecer uma maneira mais eficiente de atribuir valores condicionais e simplificar a compreensão da lista.
- Para alinhar a sintaxe do Python com outras linguagens de programação modernas que suportam expressões de atribuição.