J'ai besoin d'imprimer certaines choses uniquement lorsqu'une variable booléenne est définie sur True
. Donc, après avoir regardé cela , j'ai essayé avec un exemple simple:
>>> a = 100
>>> b = True
>>> print a if b
File "<stdin>", line 1
print a if b
^
SyntaxError: invalid syntax
Même chose si j'écris print a if b==True
.
Qu'est-ce que j'oublie ici?
python
if-statement
inline
Ricky Robinson
la source
la source
Réponses:
Python n'a pas d'
if
instruction de fin .Il existe deux types de
if
Python:if
déclaration:if
expression (introduite dans Python 2.5)Et notez que les deux
print a
etb = a
sont des déclarations. Seule laa
partie est une expression. Donc, si vous écrivezça veut dire
et de même lorsque vous écrivez
ça veut dire
Maintenant, qu'est-ce qu'il imprimerait / assignerait s'il n'y avait pas de
else
clause? L'impression / affectation est toujours là .Et notez que si vous ne voulez pas qu'elle soit là, vous pouvez toujours écrire l'
if
instruction régulière sur une seule ligne, bien qu'elle soit moins lisible et qu'il n'y ait vraiment aucune raison d'éviter la variante à deux lignes.la source
if condition: statement
cela ne fonctionne pas en cas de déclarations multilignes.if
, alors pourquoi cela fonctionne-print [i for i in range(10) if i%2]
t-il :? J'aimerais qu'ils le permettent en dehors des compréhensions ...for
entre elles.L' EXPRESSION if-else en ligne doit toujours contenir une clause else, par exemple:
Si vous souhaitez laisser inchangée la valeur de votre variable «a» - en affectant l'ancienne valeur «a» (sinon, la syntaxe l'exige):
Ce morceau de code laisse un inchangé lorsque b se révèle être faux.
la source
print a if b
else a
serait mieux alorselse 0
if b: print a
Juste besoin d'un simple si dans ce cas""
ouNone
, voir les détails dans d'autres réponses).L'instruction «else» est obligatoire. Vous pouvez faire des trucs comme ça:
ÉDITER:
Ou, selon vos besoins, vous pouvez essayer:
la source
Si vous ne le souhaitez pas,
from __future__ import print_function
vous pouvez procéder comme suit:Qui imprime:
Si vous n'êtes pas opposé à
from __future__ import print_function
ou utilisez python 3 ou version ultérieure:L'ajout de else est la seule modification que vous devez apporter pour rendre votre code syntaxiquement correct, vous avez besoin de else pour l'expression conditionnelle (le "en ligne si else bloque")
La raison pour laquelle je ne l' ai pas utilisé
None
ou0
comme d' autres dans le fil ont utilisé, parce que l' utilisationNone/0
causerait le programmeprint None
ouprint 0
dans les cas oùb
estFalse
.Si vous souhaitez en savoir plus sur ce sujet, j'ai inclus un lien vers les notes de publication du correctif que cette fonctionnalité a été ajoutée à Python.
Le «motif» ci-dessus est très similaire au motif montré dans PEP 308:
Je pense donc que dans l'ensemble, c'est une façon raisonnable de l'approcher, mais vous ne pouvez pas contester la simplicité de:
la source
print ""
imprimera toujours quelque chose: une ligne vierge.end
argument dansprint
n'apparaît qu'en Python 3.x, non?from __future__ import print_function
Depuis la version 2.5, vous pouvez utiliser l' équivalent de l' opérateur conditionnel ternaire «?:» De C et la syntaxe est:
Donc, votre exemple est bien, mais vous devez simplement ajouter
else
, comme:la source
print ''
affichera toujours une nouvelle ligne, ce qui est évité dans la réponse de Noelkd.Vous pouvez utiliser:
Vous pouvez tout aussi bien continuer comme:
Exemple du monde réel:
la source
Cela peut être fait avec un formatage de chaîne . Il fonctionne avec la notation% ainsi qu'avec .format () et f-strings (nouveau dans 3.6)
ou
ou
la source
print a if b else ""
. C'est exactement ce que fait la réponse de Noelkd.print "",
(deux points) pour Python2 etprint("", end="")
pour Python3.Pour votre cas, cela fonctionne:
Edit: Comment ça marche?
Dans la question
Donc, évaluer
résulte en
qui est affecté à
a
.Si
b == False?
,b or 0
serait évalué au deuxième opérande0
qui serait affecté àa
.la source
Essaye ça . Cela pourrait vous aider
la source
Vous êtes simplement trop compliqué.
la source
if DEBUG: print something
Vous avez toujours besoin d'un
else
en ligne si:Mais un moyen plus simple de le faire serait
a = int(b)
.la source
a = int(bool(b))
.Eh bien, pourquoi n'écrivez-vous pas simplement:
la source
hmmm, vous pouvez le faire avec une compréhension de la liste . Cela n'aurait de sens que si vous aviez une vraie gamme .. mais cela fait le travail:
ou en utilisant seulement ces deux variables:
la source