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.

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top