Предност и асоцијативност оператора у Питхону

У овом упутству ћете научити како предност и асоцијативност оператора утичу на редослед операција у Питхону.

Предност Питхон оператора

Комбинација вредности, променљивих, оператора и позива функција назива се изразом. Протумач Питхон може проценити важећи израз.

На пример:

 >>> 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 СинтакЕррор: неважећа синтакса

Занимљиви Чланци...