У овом упутству ћете научити како предност и асоцијативност оператора утичу на редослед операција у Питхону.
Предност Питхон оператора
Комбинација вредности, променљивих, оператора и позива функција назива се изразом. Протумач Питхон може проценити важећи израз.
На пример:
>>> 5 - 7 -2
Ево 5 - 7
израза. У изразу може бити више оператора.
Да би се проценили ови типови израза, у Питхону постоји правило првенства. Води редоследом којим се извршавају ове операције.
На пример, множење има већи приоритет од одузимања.
# Multiplication has higher precedence # than subtraction >>> 10 - 4 * 2 2
Али овај редослед можемо променити у заградама ()
јер има већи приоритет од множења.
# Parentheses () has higher precedence >>> (10 - 4) * 2 12
Приоритет оператора у Питхону наведен је у следећој табели. У силазном је редоследу (горња група има већи приоритет од доњих).
Оператори | Значење |
---|---|
() | Заграде |
** | Експонент |
+x , -x ,~x | Унари плус, Унари минус, Битвисе НОТ |
* , / , // ,% | Множење, дељење, подела пода, модул |
+ , - | Сабирање, одузимање |
<< , >> | Оператори битног помака |
& | У битовима И. |
^ | Битно КСОР |
| | У битовима ИЛИ |
== , != , > , >= , < , <= , is , is not , in ,not in | Поређења, идентитет, оператери чланства |
not | Логично НЕ |
and | Логично И |
or | Логично ИЛИ |
Погледајмо неколико примера:
Претпоставимо да градимо if… else
блок који се покреће if
када је ручак воће или сендвич и само ако је новац већи или једнак 2.
# Precedence of or & and meal = "fruit" money = 0 if meal == "fruit" or meal == "sandwich" and money>= 2: print("Lunch being delivered") else: print("Can't deliver lunch")
Оутпут
Достава ручка
Овај програм покреће if
блок чак и када је новац 0. Не даје нам жељени резултат јер је предност and
већа од or
.
До жељеног резултата можемо доћи помоћу заграде ()
на следећи начин:
# Precedence of or & and meal = "fruit" money = 0 if (meal == "fruit" or meal == "sandwich") and money>= 2: print("Lunch being delivered") else: print("Can't deliver lunch")
Оутпут
Не могу да испоручим ручак
Асоцијативност Питхон оператора
У горњој табели можемо видети да у истој групи постоји више оператора. Ови оператори имају исти приоритет.
Када два оператора имају исти приоритет, асоцијативност помаже у одређивању редоследа операција.
Асоцијативност је редослед оцењивања израза који има више оператора истог приоритета. Готово сви оператори имају асоцијативност слева надесно.
На пример, множење и подела пода имају исти приоритет. Дакле, ако су обојица присутна у изразу, прво се процењује леви.
# Left-right associativity # Output: 3 print(5 * 2 // 3) # Shows left-right associativity # Output: 0 print(5 * (2 // 3))
Оутпут
3 0
Напомена : Оператор експонента **
има асоцијативност здесна налево у Питхону.
# Shows the right-left associativity of ** # Output: 512, Since 2**(3**2) = 2**9 print(2 ** 3 ** 2) # If 2 needs to be exponated fisrt, need to use () # Output: 64 print((2 ** 3) ** 2)
Можемо видети да 2 ** 3 ** 2
је то еквивалентно 2 ** (3 ** 2)
.
Неасоцијативни оператори
Неки оператори попут оператора доделе и оператора поређења немају асоцијативност у Питхону. Постоје засебна правила за секвенце ове врсте оператора и не могу се изразити као асоцијативност.
На пример, x < y < z
нити значи (x < y) < z
нити x < (y < z)
. x < y < z
је еквивалентно x < y and y < z
и вреднује се слева надесно.
Даље, иако је уланчавање задатака као што x = y = z = 1
је савршено валидно, x = y = z+= 2
резултираће грешком.
# Initialize x, y, z x = y = z = 1 # Expression is invalid # (Non-associative operators) # SyntaxError: invalid syntax x = y = z+= 2
Оутпут
Датотека "", ред 8 к = и = з + = 2 СинтакЕррор: неважећа синтакса