J'ai besoin d'imprimer certaines choses uniquement lorsqu'une variable booléenne est définie sur True
. Donc, après avoir regardé this , 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 a pas a une fin if
instruction.
Il existe deux types de if
en Python:
Déclaration if
:
if condition: statement
if condition:
block
if
expression (introduit dans Python 2.5)
expression_if_true if condition else expression_if_false
Et notez que print a
et b = a
sont tous deux des instructions. Seule la partie a
est une expression. Donc si vous écrivez
print a if b else 0
ça veut dire
print (a if b else 0)
et pareillement quand vous écrivez
x = a if b else 0
ça veut dire
x = (a if b else 0)
Maintenant, qu'est-ce que cela imprimerait/assignerait s'il n'y avait pas de clause else
? L'impression/assignation est toujours là.
Et notez que si vous ne voulez pas qu'elle soit présente, vous pouvez toujours écrire l'instruction if
normale sur une seule ligne, même si elle est moins lisible et qu'il n'y a vraiment aucune raison d'éviter la variante à deux lignes.
Inline if-else EXPRESSION doit toujours contenir une clause else, par exemple:
a = 1 if b else 0
Si vous souhaitez laisser votre valeur de variable 'a' inchangée - en utilisant l'ancienne valeur 'a' (sinon, les exigences de syntaxe l'exigent):
a = 1 if b else a
Ce morceau de code laisse a inchangé lorsque b se révèle être False.
La déclaration 'else' est obligatoire. Vous pouvez faire des choses comme ça:
>>> b = True
>>> a = 1 if b else None
>>> a
1
>>> b = False
>>> a = 1 if b else None
>>> a
>>>
EDIT:
Ou, selon vos besoins, vous pouvez essayer:
>>> if b: print(a)
Si vous ne voulez pas utiliser from __future__ import print_function
, vous pouvez procéder comme suit:
a = 100
b = True
print a if b else "", # Note the comma!
print "see no new line"
Quelles impressions:
100 see no new line
Si vous n'êtes pas aversé par from __future__ import print_function
ou utilisez python 3 ou version ultérieure:
from __future__ import print_function
a = False
b = 100
print(b if a else "", end = "")
L'ajout de else est la seule modification à apporter pour que votre code soit syntaxiquement correct, vous avez besoin de else pour l'expression conditionnelle (le "in line if else blocks")
La raison pour laquelle je n'ai pas utilisé None
ou 0
comme l'ont déjà utilisé d'autres threads, c'est parce que l'utilisation de None/0
ferait que le programme soit print None
ou print 0
dans les cas où b
est False
.
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 présenté dans PEP 308:
Cette syntaxe peut sembler étrange et en arrière; pourquoi la condition va-t-elle au centre de l'expression et non à l'avant comme dans C's c? x: y? La décision a été vérifiée en appliquant la nouvelle syntaxe aux modules de la bibliothèque standard et en observant la lecture du code résultant. Dans de nombreux cas où une expression conditionnelle est utilisée, une valeur semble être le "cas commun" et une valeur est un "cas exceptionnel", utilisé uniquement dans des cas plus rares où la condition n'est pas remplie. La syntaxe conditionnelle rend ce modèle un peu plus évident:
contenu = ((doc + '\ n') si doc else '')
Donc, je pense que dans l’ensemble, c’est une façon raisonnable de s’en approcher mais vous ne pouvez pas discuter avec la simplicité de:
if logging: print data
Depuis la version 2.5, vous pouvez utiliser équivalent de C? ”?:”opérateur conditionnel ternaire et la syntaxe est la suivante:
[on_true] if [expression] else [on_false]
Donc, votre exemple est correct, mais vous devez simplement ajouter else
, comme:
print a if b else ''
Vous pouvez utiliser:
print (1==2 and "only if condition true" or "in case condition is false")
Vous pouvez aussi continuer comme ceci:
print 1==2 and "aa" or ((2==3) and "bb" or "cc")
Exemple du monde réel:
>>> print "%d item%s found." % (count, (count>1 and 's' or ''))
1 item found.
>>> count = 2
>>> print "%d item%s found." % (count, (count>1 and 's' or ''))
2 items found.
Cela peut être fait avec formatage de chaîne . Cela fonctionne avec la notation% ainsi que . Format () et chaînes f (nouvelle version 3.6)
print '%s' % (a if b else "")
ou
print '{}'.format(a if b else "")
ou
print(f'{a if b else ""}')
Essaye ça . Ça pourrait t'aider
a=100
b=True
if b:
print a
Pour votre cas cela fonctionne:
a = b or 0
Edit: Comment ça marche?
Dans la question
b = True
Donc évaluer
b or 0
résulte en
True
qui est assigné à a
.
Si b == False?
, b or 0
serait considéré comme le deuxième opérande 0
auquel on attribuerait a
.
Vous êtes tout simplement trop compliquer.
if b:
print a
Vous avez toujours besoin d'un else
dans un inline si:
a = 1 if b else 0
Mais un moyen plus facile de le faire serait a = int(b)
.
Eh bien, pourquoi ne pas simplement écrire:
if b:
print a
else:
print 'b is false'
hmmm, vous pouvez le faire avec un compréhension de la liste. Cela n’aurait de sens que si vous aviez une vraie gamme .. mais cela fait le travail:
print([a for i in range(0,1) if b])
ou en utilisant simplement ces deux variables:
print([a for a in range(a,a+1) if b])