Rozdział 9 · Słuchaj mojego rozkazu!

Short-circuit: Python czasem leniwy

and i or nie zawsze oceniają oba operandy — i można wykorzystać tę właściwość do ochrony przed błędami.

Python czasem nie sprawdza całego stanu

U and oraz or jest ważna Własność — short-circuit (zwarcie): Python oblicza sekundę operand, tylko jeśli naprawdę jest to konieczne do odpowiedzi.

and: jeśli A już False

STARTA?NIEFalseTAKB?NIEFalseTAKTrueKONIEC
and: NO w dowolnym kroku natychmiast daje False – drugi warunek sprawdza się tylko wtedy, gdy pierwszy jest prawdziwy

Jeśli A fałszywe, wszystko A and B już musi być fałszywe, niezależnie od B. Python to rozumie i nie rozumie poświęca czas na obliczanie B.

or: jeśli A już True

STARTA?TAKTrueNIEB?TAKTrueNIEFalseKONIEC
or: TAK na dowolnym etapie natychmiast daje True – drugi warunek jest sprawdzany tylko wtedy, gdy pierwszy jest fałszywy

Podobnie: jeśli A prawdziwe, całe A or B musi już być prawdą.

Prawdziwa korzyść: Ochrona przed błędami

To nie tylko optymalizacja szybkości — czasem to właśnie ona ratuje program przed awarią:

short_circuit_zashchita.py
name = ""

if name and name[0] == "A":
    print(„Nazwa zaczyna się na A”)
else:
    print(„Warunek niespełniony”)

Jeśli name jest pustym łańcuch znaków, jest falsy sam w sobie (rozdział 8), Zatem name and ... już jest fałszywe i Python nawet nie próbuje obliczyć name[0]. Gdyby kolejność była odwrotna...

bez_zashchity.py
name = ""
print(name[0] == "A" and name)
# IndexError: string index out of range!
Kolejność operandów ma znaczenie
name and name[0] == "A" jest bezpieczne: najpierw sprawdza się, czy name wcale nie jest pusty. name[0] == "A" and name jest niebezpieczne: Python spróbuje to rozgryźć name[0] nawet przed jakimkolwiek sprawdzeniem pustki i otrzyma IndexError dla pustej linii (rozdział 8, sekcja o indeksach).
★★ Zadanie samodzielne
Zabezpiecz Ostatnią Kontrolę Postaci

Napisz warunek, który bezpiecznie sprawdza, czy niepusty łańcuch znaków text kończy się na znak '!' — tak, aby dla pustego łańcuch znaków nie pojawiał się IndexError.

Praktyka: short-circuit i ochrona przed błędami
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →