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: + - * / // %.
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:
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
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