Hoe schrijf je inline if-statement voor print?

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==Trueschrijf.

Wat mis ik hier?


Antwoord 1, autoriteit 100%

Python heeft geeneen afsluitende ifinstructie.

Er zijn twee soorten ifin Python:

  1. ifverklaring:

    if condition: statement
    if condition:
        block
    
  2. ifexpressie(geïntroduceerd in Python 2.5)

    expression_if_true if condition else expression_if_false
    

En merk op, dat zowel print aals b = astatements zijn. Alleen het agedeelte 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 elseclausule was? De afdruk / toewijzing is nog steeds .

en noteer, dat als u niet wilt dat het daar is, u altijd de gewone ifverklaring 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_functionU 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_functionof 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 Noneof 0niet heb gebruikt zoals anderen in de thread hebben gebruikt, is omdat het gebruik van None/0zou leiden tot het programma print Noneof print 0in de gevallen waarin bFalseis.

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 elsetoevoegen, 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 0resulteren in de tweede operand 0die 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 elsenodig 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)

Other episodes