Ik hoef alleen wat dingen af te drukken als een booleaanse variabele is ingesteld op True
. Dus na het bekijken van dit, probeerde ik met een eenvoudig voorbeeld:
>>> a = 100
>>> b = True
>>> print a if b
File "<stdin>", line 1
print a if b
^
SyntaxError: invalid syntax
Hetzelfde als ik print a if b==True
schrijf.
Wat mis ik hier?
Antwoord 1, autoriteit 100%
Python heeft geeneen afsluitende if
instructie.
Er zijn twee soorten if
in Python:
-
if
verklaring:if condition: statement if condition: block
-
if
expressie(geïntroduceerd in Python 2.5)expression_if_true if condition else expression_if_false
En merk op, dat zowel print a
als b = a
statements zijn. Alleen het a
gedeelte is een uitdrukking. Dus als je schrijft
print a if b else 0
het betekent
print (a if b else 0)
en op dezelfde manier als je schrijft
x = a if b else 0
het betekent
x = (a if b else 0)
Nu, wat zou het afdrukken / toewijzen / toewijzen als er geen else
clausule was? De afdruk / toewijzing is nog steeds .
en noteer, dat als u niet wilt dat het daar is, u altijd de gewone if
verklaring op een enkele regel kunt schrijven, hoewel het minder leesbaar is en er echt geen reden is om te voorkomen de tweelijnsvariant.
Antwoord 2, Autoriteit 12%
Inline if-else -uitdrukking moet altijd anders clausule bevatten, bijvoorbeeld:
a = 1 if b else 0
Als u uw ‘A’ variabele waarde ongewijzigd wilt laten – Aansing Old ‘A’waarde (anders is nog steeds vereist door Syntaxis-eisen):
a = 1 if b else a
Dit stuk code verlaat a ongewijzigd wanneer B draait om false te zijn.
Antwoord 3, Autoriteit 2%
De ‘anders’-verklaring is verplicht. Je kunt dingen als volgt doen:
>>> b = True
>>> a = 1 if b else None
>>> a
1
>>> b = False
>>> a = 1 if b else None
>>> a
>>>
bewerken:
Of, afhankelijk van uw behoeften, kunt u proberen:
>>> if b: print(a)
Antwoord 4, Autoriteit 2%
Als u niet wilt from __future__ import print_function
U kunt het volgende doen:
a = 100
b = True
print a if b else "", # Note the comma!
print "see no new line"
Welke afdrukken:
100 see no new line
Als je niet vies bent van from __future__ import print_function
of python 3 of hoger gebruikt:
from __future__ import print_function
a = False
b = 100
print(b if a else "", end = "")
Het toevoegen van else is de enige wijziging die u hoeft aan te brengen om uw code syntactisch correct te maken, u heeft else nodig voor de voorwaardelijke expressie (de “in line if else-blokken”)
De reden dat ik None
of 0
niet heb gebruikt zoals anderen in de thread hebben gebruikt, is omdat het gebruik van None/0
zou leiden tot het programma print None
of print 0
in de gevallen waarin b
False
is.
Als je over dit onderwerp wilt lezen, heb ik een link toegevoegd naar de release-opmerkingen voor de patch dat deze functie aan Python is toegevoegd.
Het bovenstaande ‘patroon’ lijkt erg op het patroon in PEP 308:
Deze syntaxis lijkt misschien vreemd en achterlijk; waarom gaat de conditie?
in het midden van de uitdrukking, en niet vooraan zoals in C’s c ? x
:j? De beslissing werd gecontroleerd door de nieuwe syntaxis toe te passen op de
modules in de standaardbibliotheek en zien hoe de resulterende code
lezen. In veel gevallen waarin een voorwaardelijke expressie wordt gebruikt, is één waarde
lijkt het ‘gewone geval’ te zijn en een waarde is een ‘uitzonderlijk geval’,
alleen gebruikt in zeldzamere gevallen wanneer niet aan de voorwaarde wordt voldaan. De
voorwaardelijke syntaxis maakt dit patroon wat duidelijker:contents = ((doc + ‘\n’) if doc else ”)
Dus ik denk dat dit over het algemeen een redelijke manier is om het te benaderen, maar je kunt niet argumenteren met de eenvoud van:
if logging: print data
Antwoord 5
Sinds 2.5 kunt u equivalent van C’s ”?:”ternaire voorwaardelijke operatoren de syntaxis is:
[on_true] if [expression] else [on_false]
Dus je voorbeeld is prima, maar je moet gewoon else
toevoegen, zoals:
print a if b else ''
Antwoord 6
U kunt gebruiken:
print (1==2 and "only if condition true" or "in case condition is false")
Je kunt net zo goed doorgaan als:
print 1==2 and "aa" or ((2==3) and "bb" or "cc")
Voorbeeld uit de echte wereld:
>>> 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.
Antwoord 7
Dit kan met tekenreeksopmaak. Het werkt zowel met de %-notatie als met .format()en f-strings(nieuw in 3.6)
print '%s' % (a if b else "")
of
print '{}'.format(a if b else "")
of
print(f'{a if b else ""}')
Antwoord 8
Voor jouw geval werkt dit:
a = b or 0
Bewerken:Hoe werkt dit?
In de vraag
b = True
Dus evalueren
b or 0
resulteert in
True
die is toegewezen aan a
.
Als b == False?
, zou b or 0
resulteren in de tweede operand 0
die zou worden toegewezen aan a
.
Antwoord 9
Probeer dit eens. Het kan je helpen
a=100
b=True
if b:
print a
Antwoord 10
Je maakt het gewoon te ingewikkeld.
if b:
print a
Antwoord 11
Je hebt altijd een else
nodig in een inline als:
a = 1 if b else 0
Maar een eenvoudigere manier om dit te doen is a = int(b)
.
Antwoord 12
Nou, waarom schrijf je niet gewoon:
if b:
print a
else:
print 'b is false'
Antwoord 13
hmmm, je kunt het doen met een lijstbegrip. Dit zou alleen logisch zijn als je een echt bereik had.. maar het doet zijn werk:
print([a for i in range(0,1) if b])
of door alleen die twee variabelen te gebruiken:
print([a for a in range(a,a+1) if b])
Antwoord 14
Je kunt een inline ternaire operator als volgt schrijven:
sure = True
# inline operator
is_true = 'yes' if sure else 'no'
# print the outcome
print(is_true)