Eu li os links abaixo, mas não respondem à minha dúvida.
O Python tem um operador condicional ternário? (a questão é sobre condensar a instrução if-else em uma linha)
Existe uma maneira mais fácil de escrever uma instrução if-elif-else para que ela caiba em uma linha?
Por exemplo,
if expression1:
statement1
elif expression2:
statement2
else:
statement3
Ou um exemplo do mundo real:
if i > 100:
x = 2
elif i < 100:
x = 1
else:
x = 0
Eu apenas sinto que se o exemplo acima pudesse ser escrito da seguinte maneira, poderia parecer mais conciso.
x=2 if i>100 elif i<100 1 else 0 [WRONG]
fonte
a = 1 if i < 100 else (2 if i > 100 else 0)
(Não testado, mas acho que deve funcionar)Se você só precisa de expressões diferentes para casos diferentes, isso pode funcionar para você:
Por exemplo:
fonte
"pos"
não é uma declaração, é uma expressão.Apenas aninhe outra cláusula if na instrução else. Mas isso não faz com que pareça mais bonito.
fonte
Apesar de algumas outras respostas: SIM, é possível :
se traduz no seguinte forro:
na verdade, você pode aninhá-los até o infinito. Aproveitar ;)
fonte
Você pode, opcionalmente, usar o
get
método dedict
:Você não precisa do
get
método se uma das chaves for avaliada comoTrue
:Idealmente, no máximo uma das chaves deve ser avaliada como
True
. Se mais de uma chave for avaliada comoTrue
, os resultados podem parecer imprevisíveis.fonte
Há uma alternativa que é bastante ilegível na minha opinião, mas vou compartilhar de qualquer maneira, apenas como curiosidade:
Mais informações aqui: https://docs.python.org/3/library/stdtypes.html#boolean-operations-and-or-not
fonte
Se quiser usar o código mencionado acima em uma linha, você pode usar o seguinte:
Ao fazer isso, x será atribuído 2 se i> 100, 1 se i <100 e 0 se i = 100
fonte
Também depende da natureza de suas expressões. O conselho geral sobre as outras respostas de "não fazer isso" é bastante válido para declarações e expressões genéricas.
Mas se tudo que você precisa é uma tabela de "despacho", como chamar uma função diferente dependendo do valor de uma determinada opção, você pode colocar as funções a serem chamadas dentro de um dicionário.
Algo como:
Em vez de um if-else:
fonte
As pessoas já mencionaram expressões ternárias. Às vezes, com uma atribuição condicional simples como exemplo, é possível usar uma expressão matemática para realizar a atribuição condicional. Isso pode não tornar o seu código muito legível, mas o coloca em uma linha bastante curta. Seu exemplo poderia ser escrito assim:
As comparações seriam verdadeiras ou falsas e, ao multiplicar por números, seria 1 ou 0. Pode-se usar um + em vez de um | no meio.
fonte
O operador ternário é a melhor maneira de uma expressão concisa. A sintaxe é
variable = value_1 if condition else value_2
. Portanto, para seu exemplo, você deve aplicar o operador ternário duas vezes:fonte
Você pode usar instruções if ternárias aninhadas.
fonte