Colocando uma declaração simples de If-Then-Else em uma linha [duplicata
-
25-09-2019 - |
Pergunta
Possível duplicata:
Operador ternário Python
Estou apenas entrando em Python e gosto muito da termos da sintaxe. No entanto, existe uma maneira mais fácil de escrever um if
-then
-else
declaração para que se encaixe em uma linha?
Por exemplo:
if count == N:
count = 0
else:
count = N + 1
Existe uma maneira mais simples de escrever isso? Quero dizer, no Objective-C, eu escreveria isso como:
count = count == N ? 0 : count + 1;
Existe algo semelhante para Python?
Atualizar
Eu sei que neste caso posso usar count == (count + 1) % N
.
Estou perguntando sobre a sintaxe geral.
Solução
Isso é mais especificamente um operador ternário expressão do que um if-then, aqui está a sintaxe python
value_when_true if condition else value_when_false
Melhor exemplo: (obrigado Sr. Burns)
'Yes' if fruit == 'Apple' else 'No'
Agora com atribuição e contraste com a sintaxe se
fruit = 'Apple'
isApple = True if fruit == 'Apple' else False
vs.
fruit = 'Apple'
isApple = False
if fruit == 'Apple' : isApple = True
Outras dicas
Além disso, você ainda pode usar o "comum" if
Sintaxe e confundi -a em uma linha com um cólon.
if i > 3: print("We are done.")
ou
field_plural = None
if field_plural is not None: print("insert into testtable(plural) '{0}'".format(field_plural))
count = 0 if count == N else N+1
- O operador ternário. Embora eu diga que sua solução é mais legível que isso.
Sintaxe ternária geral:
value_true if <test> else value_false
Outra maneira pode ser:
[value_false, value_true][<test>]
por exemplo:
count = [0,N+1][count==N]
Isso avalia as duas filiais antes de escolher uma. Para avaliar apenas o ramo escolhido:
[lambda: value_false, lambda: value_true][<test>]()
por exemplo:
count = [lambda:0, lambda:N+1][count==N]()
<execute-test-successful-condition> if <test> else <execute-test-fail-condition>
com seu snippet de código se tornaria,
count = 0 if count == N else N + 1