Python nabízí logické operátory pro provádění logických (logických) operací.(and
,or
,not
)
Používá se k popisu vztahu mezi více podmínkami v příkazu if.
Tato část popisuje následující.
- křižovatka:
and
- logické přidání:
or
- odmítnutí:
not
and
,or
,not
Přednost operátora
Kromě toho jsou jako varování vysvětleny následující body.
- Logické operátory pro objekty jiného typu než bool
and
,or
Tyto návratové hodnoty nemusí být nutně typu bool.- Zkrat (vyhodnocení zkratu)
křižovatka: and
a vrací logický součin dvou hodnot.
print(True and True)
# True
print(True and False)
# False
print(False and True)
# False
print(False and False)
# False
Ve skutečnosti se často nepoužívá pro true nebo false, ale pro podmíněné výrazy s použitím operátorů porovnávání. Pro vaši informaci jsou operátory porovnávání následující.
<
>
a = 10
print(0 < a)
# True
print(a < 100)
# True
print(0 < a and a < 100)
# True
a lze je spojit takto.
print(0 < a < 100)
# True
logické přidání: or
nebo vrátí logickou OR těchto dvou hodnot.
print(True or True)
# True
print(True or False)
# True
print(False or True)
# True
print(False or False)
# False
odmítnutí: not
not“ vrací negaci hodnoty; true a false jsou obrácené.
print(not True)
# False
print(not False)
# True
and,or,notPřednost operátora
Pořadí priority těchto logických operátorů je následující: not je nejvyšší.
not
and
or
V následující ukázce kódu je výše uvedený výraz interpretován jako níže uvedený. Protože s extra závorkami není problém, může být jednodušší je v případech, jako je tento příklad, přehledně popsat.
print(True or True and False)
# True
print(True or (True and False))
# True
Pokud chcete operovat s nebo před a, použijte závorky().
print((True or True) and False)
# False
<
,>
Tyto srovnávací operátory mají ještě vyšší prioritu než operátory, které nemají prioritu. Proto nejsou nutné závorky pro každou porovnávací operaci, jako tomu bylo v příkladu výše.
print(0 < a and a < 100)
# True
Shrnutí priority operátorů v jazyce Python naleznete v oficiální dokumentaci níže.
Logické operátory pro objekty jiného typu než bool
Pomocí těchto logických operátorů se jako logické hodnoty zpracovávají nejen typy bool (true, false), ale také čísla, řetězce, seznamy atd.
Následující objekty jsou v logických operacích jazyka Python považovány za nepravdivé.
- Konstanty definované jako false:
None
,false
- Nula v číselných typech:
0
,0
,0j
,Decimal(0)
,Fraction(0, 1)
- Prázdná sekvence nebo kolekce:
''
,()
,[]
,{}
,set()
,range(0)
Všechny ostatní hodnoty jsou považovány za pravdivé.
Funkci bool() lze použít k získání logické hodnoty objektu. Všimněte si, že řetězec '0' nebo 'False' je považován za pravdivý.
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
Chcete-li zpracovat '0' nebo 'false' v řetězci jako false, použijte distutils.util.strtobool().
and,orTyto návratové hodnoty nemusí být nutně typu bool.
Zde je příklad objektu jiného než typu bool, který ukazuje výsledek každého operátoru na číselné hodnotě.
x = 10 # True
y = 0 # False
print(x and y)
# 0
print(x or y)
# 10
print(not x)
# False
Jak je vidět z výše uvedeného příkladu, and a or v jazyce Python nevrací true nebo false typu bool, ale vrací hodnotu vlevo nebo vpravo podle toho, zda je true nebo false. Příklad je číselný, ale totéž platí i pro jiné typy, jako jsou řetězce a seznamy. Mimochodem, not vrací true nebo false typu bool.
Definice návratových hodnot a a nebo jsou následující.
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
Pokud jsou hodnoty levého a pravého výrazu zvlášť true a false, jsou návratové hodnoty snadno pochopitelné. Na druhou stranu, pokud jsou oba výrazy pravdivé nebo oba nepravdivé, bude se návratová hodnota lišit v závislosti na pořadí.
Pokud jej použijete jako podmíněný výraz v příkazu if apod., výsledek se vyhodnotí jako logická hodnota a zpracuje se, takže se o něj nemusíte starat, ale pokud použijete návratovou hodnotu pro další zpracování, musíte být opatrní.
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
Pokud s ní chcete zacházet jako s pravdivou nebo nepravdivou, můžete to udělat jako v posledním příkladu.bool(x and y)
Návratové hodnoty příkazů and a or jsou shrnuty v následující tabulce.
x | y | x and y | x or y |
---|---|---|---|
true | false | y | x |
false | true | x | y |
true | true | y | x |
false | false | x | y |
Zkrat (vyhodnocení zkratu)
Jak je vidět z výše uvedené tabulky, pokud je x false v x a y nebo pokud je x true v x nebo y, návratová hodnota bude x bez ohledu na hodnotu y.
V takovém případě se y nevyhodnocuje.
and
,or
Všimněte si, že pokud zavoláte funkci nebo metodu na pravé straně těchto procesů a provedete nějaké zpracování, proces se nemusí provést v závislosti na výsledku na levé straně.
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