Rozdział 5 · Pobawmy się liczbami!

Skojarzenie operatorów

Priority pokazuje, który operator jest pierwszy. Asocjowalność odnosi się do kolejności, w jakiej kilka operatorów o tym samym priorytecie powinno być liczonych w rzędzie.

Priorytet odpowiada na pytanie „który operator jest pierwszy” asocjowalność — na pytanie „w jakiej kolejności liczyć kilku operatorów TEGO samego priorytetu po kolei”.

Większość operatorów jest od lewej do prawej

8 - 4 - 2 jest uważane za (8 - 4) - 2, to znaczy, od lewej do prawej. Nazywa się to lewicowa asocjowalność, i tak się zachowują Prawie wszyscy operatorzy Python: + - * / // %.

--842
8 - 4 - 2 — lewostronnie asocjacyjne: najpierw lewa para (8 - 4), potem wynik minus 2
levaya.py
print(8 - 4 - 2)     #2, bo to (8 – 4) – 2 = 4 – 2
print((8 - 4) - 2)   #2 – Wyraźnie to samo
print(8 - (4 - 2))   # 6 — a oto inna liczba!

Wyjątek: ** — od prawej do lewej

Potęgowanie — jedyny operator w tym rozdziale z prawą asocjowalności. Porównajmy, ile każda opcja dałaby 2 ** 3 ** 2:

****232
Gdyby ** było lewostronnie asocjacyjne: (2 ** 3) ** 2 = 64 – ale to NIE jest to, co Python robi
**2**32
Właściwie ** asocjacyjne: 2 ** (3 ** 2) = 512
stepen_associativnost.py
print(2 ** 3 ** 2)     # 512 — Python liczy jak 2 ** (3 ** 2)
print((2 ** 3) ** 2)   # 64 — wariant lewostronny dałby inną liczbę
print(2 ** (3 ** 2))   #512 – Odpowiada rzeczywistemu zachowaniu Python
2 ** 3 ** 2
2 ** (3 ** 2)
2 ** 9
512
Prawo-asocjowalność: najpierw liczy się wykładnik GÓRNY (prawy)
Po co ** w ogóle to zrobiono
Prawa asocjowalność stopnia pokrywa się z matematyczną tradycją „wieży stopni”tetration): w matematyce abc zawsze odczytywany jest jako a(bc), a nie odwrotnie. Python tutaj po prostu podąża za długo utrzymywaną konwencją matematyczną.
Praktyka: Operator Asocjowalność
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →