Python: kolejność wyznaczania wartości logicznej

9-Gru-2020

Wyrażenia logiczne w Pythonie są wyznaczane od lewej do prawej. Jeśli więc masz w if wyrażenie logiczne expr1 and expr2, to expr2 będzie wyliczane tylko wtedy jeśli expr1 ma wartość True. Jest to całkiem oczywiste z punktu widzenia optymalizacji liczby wykonywanych obliczeń – gdyby expr1 już miało wartość False, to nie ma sensu wyliczać wartości dla expr2, bo ostateczna wartość dla expr1 and expr2 to False!

Jednak informacja o kolejności wyznaczania wartości jest istotna. Popatrz na ten przykład:

Uruchomienie skryptu skończy się błędem

IndexError: list index out of range

Dlaczego? Bo w pewnym momencie i będzie wynosiło 3 i odwołanie do box[i] nie ma sensu.  Jeśli jednak zmieni się kolejność warunków w while:

To nim odwołamy się do box[i], najpierw odbędzie się sprawdzenie, czy i<len(box). To wyrażenie zwróci wartość False, a co za tym idzie nie odbędzie się obliczanie dla prawej części wyrażenia and.

Sprytne!

 

Dodaj komentarz:

Autor: Rafał Kraik