Python biedt logische operatoren om logische (Booleaanse) bewerkingen uit te voeren.(and
,or
,not
)
Het wordt gebruikt om de relatie tussen meerdere voorwaarden in een if-verklaring te beschrijven.
In dit hoofdstuk wordt het volgende beschreven.
- kruispunt:
and
- logische toevoeging:
or
- ontkenning:
not
and
,or
,not
Operator voorrang
Daarnaast worden de volgende punten als waarschuwingen toegelicht.
- Logische operatoren voor objecten van een ander type dan bool
and
,or
Deze terugkeerwaarden zijn niet noodzakelijk van het type bool.- Kortsluiting (evaluatie kortsluiting)
kruispunt: and
en geeft het logische product van twee waarden.
print(True and True)
# True
print(True and False)
# False
print(False and True)
# False
print(False and False)
# False
In feite wordt het vaak niet gebruikt voor waar of onwaar, maar voor voorwaardelijke uitdrukkingen die gebruik maken van vergelijkingsoperatoren. Ter informatie, de vergelijkingsoperatoren zijn als volgt.
<
>
a = 10
print(0 < a)
# True
print(a < 100)
# True
print(0 < a and a < 100)
# True
en kunnen als volgt aan elkaar worden gekoppeld.
print(0 < a < 100)
# True
logische toevoeging: or
of geeft de logische OF van de twee waarden.
print(True or True)
# True
print(True or False)
# True
print(False or True)
# True
print(False or False)
# False
ontkenning: not
not” geeft de negatie van de waarde terug; waar en onwaar zijn omgedraaid.
print(not True)
# False
print(not False)
# True
and,or,notOperator voorrang
De rangorde van deze logische operatoren is als volgt: niet is de hoogste.
not
and
or
In de volgende voorbeeldcode wordt de bovenstaande uitdrukking geïnterpreteerd alsof het de uitdrukking hieronder is. Aangezien er geen probleem is met extra haakjes, is het misschien gemakkelijker om ze duidelijk te beschrijven in gevallen zoals dit voorbeeld.
print(True or True and False)
# True
print(True or (True and False))
# True
Als je of voor en wilt zetten, gebruik je haakjes().
print((True or True) and False)
# False
<
,>
Deze vergelijkingsoperatoren hebben zelfs een hogere voorrang dan niet. Daarom zijn haakjes niet nodig voor elke vergelijkingsoperatie, zoals het geval was in het bovenstaande voorbeeld.
print(0 < a and a < 100)
# True
Zie de officiële documentatie hieronder voor een overzicht van operator rangorde in Python.
Logische operatoren voor objecten van een ander type dan bool
Met deze logische operatoren worden niet alleen booltypes (waar, onwaar), maar ook getallen, strings, lijsten, enz. als booleaanse waarden verwerkt.
De volgende objecten worden als onwaar beschouwd in de logische operaties van Python.
- Constanten gedefinieerd als onwaar:
None
,false
- Nul in numerieke typen:
0
,0
,0j
,Decimal(0)
,Fraction(0, 1)
- Lege sequentie of verzameling:
''
,()
,[]
,{}
,set()
,range(0)
Alle andere waarden worden als waar beschouwd.
De functie bool() kan gebruikt worden om de booleaanse waarde van een object te verkrijgen. Merk op dat de string '0' of 'False' als waar wordt beschouwd.
print(bool(10))
# True
print(bool(0))
# False
print(bool(''))
# False
print(bool('0'))
# True
print(bool('False'))
# True
print(bool([]))
# False
print(bool([False]))
# True
Om '0' of 'false' in een string als false te behandelen, gebruik je distutils.util.strtobool().
and,orDeze terugkeerwaarden zijn niet noodzakelijk van het type bool.
Hier is een voorbeeld van een object van een ander type dan een bool, met het resultaat van elke operator op een numerieke waarde.
x = 10 # True
y = 0 # False
print(x and y)
# 0
print(x or y)
# 10
print(not x)
# False
Zoals je kan zien in het voorbeeld hierboven, geven en en of in Python niet waar of onwaar terug van het type bool, maar geven de waarde links of rechts terug, afhankelijk van of het waar of onwaar is. Het voorbeeld is numeriek, maar hetzelfde geldt voor andere types zoals strings en lijsten. Overigens, not geeft true of false terug van het type bool.
De definities van de terugkeerwaarden van en en of zijn als volgt.
The expression x and y first evaluates x; if x is false, its value is returned; otherwise, y is evaluated and the resulting value is returned.
The expression x or y first evaluates x; if x is true, its value is returned; otherwise, y is evaluated and the resulting value is returned.
6.11. Boolean operations — Expressions — Python 3.10.1 Documentation
Indien de waarden van de linker en rechter expressie afzonderlijk waar en onwaar zijn, zijn de returnwaarden gemakkelijk te begrijpen. Anderzijds, indien beide waar of beide onwaar zijn, zal de terugkeerwaarde verschillend zijn afhankelijk van de volgorde.
Als je het gebruikt als een voorwaardelijke uitdrukking in een if statement, enz., wordt het resultaat beoordeeld als een boolean waarde en verwerkt, dus je hoeft je er geen zorgen over te maken, maar als je de retourwaarde gebruikt voor verdere verwerking, moet je voorzichtig zijn.
x = 10 # True
y = 100 # True
print(x and y)
# 100
print(y and x)
# 10
print(x or y)
# 10
print(y or x)
# 100
x = 0 # False
y = 0.0 # False
print(x and y)
# 0
print(y and x)
# 0.0
print(x or y)
# 0.0
print(y or x)
# 0
print(bool(x and y))
# False
Als u het als waar of onwaar wilt behandelen, kunt u dat doen zoals in het laatste voorbeeld.bool(x and y)
De terugkeerwaarden van en en of zijn samengevat in de onderstaande tabel.
x | y | x and y | x or y |
---|---|---|---|
true | false | y | x |
false | true | x | y |
true | true | y | x |
false | false | x | y |
Kortsluiting (evaluatie kortsluiting)
Zoals u in de tabel hierboven kunt zien, als x onwaar is in x en y, of als x waar is in x of y, zal de terugkeerwaarde x zijn, ongeacht de waarde van y.
In zo'n geval wordt y niet geëvalueerd.
and
,or
Merk op dat als je een functie of methode aanroept aan de rechterkant van deze processen om een bepaalde verwerking te doen, het proces mogelijk niet wordt uitgevoerd, afhankelijk van het resultaat aan de linkerkant.
def test():
print('function is called')
return True
print(True and test())
# function is called
# True
print(False and test())
# False
print(True or test())
# True
print(False or test())
# function is called
# True