Eu preciso imprimir algumas coisas apenas quando uma variável booleana estiver definida como True
. Então, depois de analisar isso , tentei com um exemplo simples:
>>> a = 100
>>> b = True
>>> print a if b
File "<stdin>", line 1
print a if b
^
SyntaxError: invalid syntax
A mesma coisa se eu escrever print a if b==True
.
O que estou perdendo aqui?
python
if-statement
inline
Ricky Robinson
fonte
fonte
Respostas:
Python não tem uma
if
declaração à direita .Existem dois tipos de
if
em Python:if
declaração:if
expressão (introduzida no Python 2.5)E note que ambas
print a
eb = a
são declarações. Somente aa
parte é uma expressão. Então se você escreveIsso significa
e da mesma forma quando você escreve
Isso significa
Agora, o que seria impresso / atribuído se não houvesse
else
cláusula? A impressão / atribuição ainda está lá .E observe que, se você não deseja que ela esteja lá, sempre pode escrever a
if
declaração regular em uma única linha, embora seja menos legível e não haja realmente nenhuma razão para evitar a variante de duas linhas.fonte
if condition: statement
isso não funciona no caso de declarações multilinhas.if
, por que isso funcionaprint [i for i in range(10) if i%2]
:? Gostaria que eles permitem fora de compreensões ...for
entre elas.EXPRESSION if-else embutido deve sempre conter a cláusula else, por exemplo:
Se você deseja manter o valor da variável 'a' inalterado - assumindo o valor 'a' antigo (mais ainda é exigido pelas demandas de sintaxe):
Este pedaço de código deixa um inalterado quando b voltas para ser falsa.
fonte
print a if b
else a
seria melhor entãoelse 0
if b: print a
Só precisa de um simples se nesse caso""
ouNone
, veja detalhes em outras respostas).A declaração 'else' é obrigatória. Você pode fazer coisas assim:
EDITAR:
Ou, dependendo de suas necessidades, você pode tentar:
fonte
Se você não quiser,
from __future__ import print_function
faça o seguinte:Que imprime:
Se você não é averso
from __future__ import print_function
ou está usando o python 3 ou posterior:Adicionar o else é a única alteração que você precisa fazer para tornar seu código sintaticamente correto. Você precisa do else para a expressão condicional (o "in line if else blocks")
A razão de eu não usar
None
ou0
como outros no segmento têm usado, é porque usarNone/0
faria com que o programa paraprint None
ouprint 0
nos casos em queb
éFalse
.Se você quiser ler sobre este tópico, incluí um link para as notas de versão do patch que esse recurso foi adicionado ao Python.
O 'padrão' acima é muito semelhante ao padrão mostrado no PEP 308:
Então, no geral, essa é uma maneira razoável de abordá-la, mas você não pode argumentar com a simplicidade de:
fonte
print ""
ainda imprimirá algo: uma linha em branco.end
argumntprint
aparece apenas no Python 3.x, certo?from __future__ import print_function
Desde o 2.5, você pode usar o operador condicional ternário equivalente a C? ”:” E a sintaxe é:
Portanto, seu exemplo é bom, mas você deve simplesmente adicionar
else
, como:fonte
print ''
ainda imprimirá uma nova linha, o que é evitado na resposta de Noelkd.Você pode usar:
Da mesma forma, você pode continuar assim:
Exemplo do mundo real:
fonte
Isso pode ser feito com formatação de string . Ele funciona com a notação%, bem como com .format () e f-strings (novo em 3.6)
ou
ou
fonte
print a if b else ""
. Qual é exatamente o que a resposta de Noelkd faz.print "",
(dois pontos) para Python2 e usandoprint("", end="")
para Python3.Para o seu caso, isso funciona:
Editar: Como isso funciona?
Na pergunta
Então, avaliando
resulta em
que é atribuído a
a
.Se
b == False?
,b or 0
avaliaria o segundo operando ao0
qual seria atribuídoa
.fonte
Tente isso. Isso pode ajudá-lo
fonte
Você é simplesmente complicado demais.
fonte
if DEBUG: print something
Você sempre precisa de um
else
em linha se:Mas uma maneira mais fácil de fazer isso seria
a = int(b)
.fonte
a = int(bool(b))
.Bem, por que você simplesmente não escreve:
fonte
hmmm, você pode fazer isso com uma compreensão de lista . Isso só faria sentido se você tivesse um alcance real ... mas faz o trabalho:
ou usando apenas essas duas variáveis:
fonte