Problem: Como realizar atribuições condicionais de uma linha em Python?
Exemplo: Digamos que você começa com o seguinte código.
x = 2boo = True
Você quer definir o valor de x
para 42
se boo
é True
, e não faça nada de diferente.
Vamos mergulhar nas diferentes formas de realizar isto em Python. Começamos com uma visão geral:
Exercício: Corre o código. São todas as saídas iguais?
Próximo, mergulhe em cada um desses métodos e aumente a sua superpotência de uma linha!
Tabela de conteúdos
Método 1: Operador ternário
O operador ternário mais básico x if c else y
devolve a expressão x
se a expressão booleana c
avalia para True
. Caso contrário, se a expressão c
avalia para False
, o operador ternário retorna a expressão alternativa y
.
<OnTrue> if <Condition> else <OnFalse>
Operand | Descrição |
---|---|
<Em Verdade> | A expressão de retorno do operador no caso da condição avalia para True |
<Condição> | Condição que determina se deve devolver o ramo <Em Verdadeiro> ou o ramo <Em Falso>. |
<OnFalse> | A expressão de retorno do operador no caso da condição avaliar para False |
Vamos voltar ao nosso problema de exemplo! Você quer definir o valor de x
para 42
se boo
é True
, e não faça nada de diferente. Aqui está como fazer isto numa única linha:
x = 42 if boo else x
Apesar de usar o operador ternário funcionar, você pode se perguntar se é possível evitar a parte ...else x
para clareza do código? No próximo método, você vai aprender como!
Se precisar de melhorar a sua compreensão do operador ternário, veja o seguinte vídeo:
Pode também ler o artigo relacionado:
- Python One Line Ternary
Método 2: Single-Line If Statement
Tal como no método anterior, você quer definir o valor de x
para 42
se boo
é True
, e não faça nada de diferente. Mas você não quer ter um ramo redundante. Como fazer isso em Python?
A solução para saltar a outra parte do operador ternário é surpreendentemente simples – use um padrão if sem outro ramo e escreva-o em uma única linha de código:
if boo: x = 42
Para aprender mais sobre o que você pode empacotar em uma única linha, assista ao meu vídeo tutorial “If-Then-Else in One Line Python”:
Método 3: Ternary Tuple Syntax Hack
Uma forma abreviada do operador ternário é a seguinte sintaxe de tuple.
Sintaxe: Você pode usar a sintaxe do tuple (x, y)
consistindo de um tuple (x, y)
e uma condição c
encerrado em um colchete. Aqui está uma forma mais intuitiva de representar esta sintaxe de tuple.
(<OnFalse>, <OnTrue>)
Operand | Descrição |
---|---|
<Em Verdade> | A expressão de retorno do operador no caso da condição avalia para True |
<Condição> | Condição que determina se deve devolver o ramo <Em Verdadeiro> ou o ramo <Em Falso>. |
<OnFalse> | A expressão de retorno do operador no caso da condição avaliar para False |
De facto, a ordem dos operandos <OnFalse>
e <OnTrue>
é simplesmente invertida quando comparada com a do operador ternário básico. Primeiro, você tem o ramo que é devolvido se a condição NÃO se mantém. Segundo, você tem o ramo que é retornado se a condição se mantiver.
x = (x, 42)
Clever! A condição boo
mantém, então o valor de retorno passado para a variável x
é a variável <OnTrue>
ramo 42
.
Não se preocupe se isto o confunde – você não está sozinho. Você pode esclarecer a sintaxe do tuple de uma vez por todas, estudando meu artigo detalhado no blog.
Artigo relacionado: Python Ternary – Tuple Syntax Hack
Python One-Liners Book
Programadores Python One-Liners irão melhorar suas habilidades de informática com estes úteis one-liners.
Python One-Liners irá ensiná-lo a ler e escrever “one-liners”: declarações concisas de funcionalidades úteis empacotadas em uma única linha de código. Você aprenderá como desempacotar e entender sistematicamente qualquer linha de código Python, e escrever de forma eloquente e poderosamente comprimida Python como um expert.
Os cinco capítulos do livro cobrem dicas e truques, expressões regulares, aprendizagem de máquinas, tópicos centrais de ciência de dados, e algoritmos úteis. Explicações detalhadas de uma linha introduzem conceitos-chave da ciência da computação e aumentam suas habilidades de codificação e análise. Você aprenderá sobre recursos avançados Python, como compreensão de listas, fatiamento, funções lambda, expressões regulares, mapeamento e redução de funções, e tarefas de fatiamento. Você também aprenderá como fazê-lo:
– Alavancar estruturas de dados para resolver problemas do mundo real, como usar a indexação booleana para encontrar cidades com poluição acima da média
– Usar o básico NumPy como array, forma, eixo, tipo, transmissão, indexação avançada, fatiamento, classificação, pesquisa, agregação e estatística
– Calcular estatísticas básicas de arrays de dados multidimensionais e os algoritmos K-Means para aprendizagem não supervisionada
– Criar expressões regulares mais avançadas usando agrupamento e grupos nomeados, cabeças de looka negativas, personagens fugidos, espaços em branco, conjuntos de caracteres (e conjuntos de caracteres negativos) e operadores gananciosos/não gananciosos
– Entenda uma ampla gama de tópicos de informática, incluindo anagramas, palíndromos, superconjuntos, permutações, factorials, números primos, números Fibonacci, ofuscação, busca e classificação algorítmica
No final do livro, você saberá como escrever Python no seu mais refinado, e criar concisas e belas peças de “arte Python” em apenas uma linha.
>
Pega o teu Python One-Liners Agora!!
Apesar de trabalhar como pesquisador em sistemas distribuídos, o Dr. Christian Mayer encontrou o seu amor pelo ensino de estudantes de informática.
Para ajudar os estudantes a atingir níveis mais elevados de sucesso em Python, ele fundou o site de educação em programação Finxter.com. Ele é autor do popular livro de programação Python One-Liners (NoStarch 2020), co-autor da série Coffee Break Python de livros auto-publicados, entusiasta da ciência da computação, freelancer, e proprietário de um dos 10 maiores blogs Python do mundo.
As suas paixões são escrever, ler e codificar. Mas sua maior paixão é servir aspirantes a codificadores através do Finxter e ajudá-los a aumentar suas habilidades. Você pode se juntar à sua academia de e-mail grátis aqui.