Python'da Operatörlerin Önceliği ve İlişkilendirilebilirliği

Bu eğitimde, operatörlerin önceliğinin ve ilişkiselliğinin Python'daki işlem sırasını nasıl etkilediğini öğreneceksiniz.

Python Operatörlerinin Önceliği

Değerlerin, değişkenlerin, operatörlerin ve işlev çağrılarının birleşimi bir ifade olarak adlandırılır. Python yorumlayıcısı geçerli bir ifadeyi değerlendirebilir.

Örneğin:

 >>> 5 - 7 -2

İşte 5 - 7bir ifade. Bir ifadede birden fazla operatör olabilir.

Bu tür ifadeleri değerlendirmek için Python'da bir öncelik kuralı vardır. Bu işlemlerin gerçekleştirilme sırasına rehberlik eder.

Örneğin, çarpma, çıkarmadan daha yüksek önceliğe sahiptir.

 # Multiplication has higher precedence # than subtraction >>> 10 - 4 * 2 2

Ancak ()çarpmadan daha yüksek önceliğe sahip olduğu için bu sıralamayı parantez kullanarak değiştirebiliriz .

 # Parentheses () has higher precedence >>> (10 - 4) * 2 12

Python'daki operatör önceliği aşağıdaki tabloda listelenmiştir. Azalan sıradadır (üst grup, alt gruplardan daha yüksek önceliğe sahiptir).

Operatörler Anlam
() Parantez
** Üs
+x, -x,~x Birli artı, Birli eksi, Bitsel DEĞİL
*, /, //,% Çarpma, Bölme, Kat bölme, Modül
+, - Toplama çıkarma
<<, >> Bitsel kaydırma operatörleri
& Bitsel AND
^ Bitsel ÖZELVEYA
| Bit tabanlı VEYA
==, !=, >, >=, <, <=, is, is not, in,not in Karşılaştırmalar, Kimlik, Üyelik operatörleri
not Mantıksal DEĞİL
and Mantıksal AND
or Mantıksal VEYA

Bazı örneklere bakalım:

Öğle yemeği meyve veya sandviç olduğunda ve yalnızca para 2'den fazla veya ona eşit olduğunda if… elseçalışan bir blok inşa ettiğimizi varsayalım if.

 # 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")

Çıktı

 Öğle yemeği teslim ediliyor

Bu program ifpara 0 bile olsa blok çalıştırır . 'Nin önceliği' andden daha yüksek olduğu için bize istenen çıktıyı vermez or.

()Aşağıdaki şekilde parantez kullanarak istenen çıktıyı elde edebiliriz :

 # 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")

Çıktı

 Öğle yemeği getiremiyorum

Python Operatörlerinin İlişkilendirilebilirliği

Yukarıdaki tabloda aynı grupta birden fazla operatörün bulunduğunu görebiliriz. Bu operatörler aynı önceliğe sahiptir.

İki operatör aynı önceliğe sahip olduğunda, ilişkilendirilebilirlik işlemlerin sırasını belirlemeye yardımcı olur.

İlişkilendirilebilirlik, aynı önceliğe sahip birden çok işleci olan bir ifadenin değerlendirildiği sıradır. Hemen hemen tüm operatörlerin soldan sağa ilişkilendirilebilirliği vardır.

Örneğin, çarpma ve taban bölme aynı önceliğe sahiptir. Dolayısıyla, bir ifadede her ikisi de mevcutsa, önce soldaki değerlendirilir.

 # Left-right associativity # Output: 3 print(5 * 2 // 3) # Shows left-right associativity # Output: 0 print(5 * (2 // 3))

Çıktı

 3 0

Not : Üs operatörü **Python'da sağdan sola ilişkilendirilebilirliğe sahiptir.

 # 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)

Bunun 2 ** 3 ** 2eşdeğer olduğunu görebiliriz 2 ** (3 ** 2).

İlişkisel olmayan operatörler

Atama operatörleri ve karşılaştırma operatörleri gibi bazı operatörlerin Python'da ilişkilendirilebilirliği yoktur. Bu tür işleç dizileri için ayrı kurallar vardır ve ilişkilendirilebilirlik olarak ifade edilemez.

Örneğin, x < y < zne anlamı (x < y) < zne de x < (y < z). x < y < zeşdeğerdir x < y and y < zve soldan sağa doğru değerlendirilir.

Ayrıca, atamaların zincirlenmesi x = y = z = 1tamamen geçerliyken, x = y = z+= 2hataya neden olacaktır.

 # Initialize x, y, z x = y = z = 1 # Expression is invalid # (Non-associative operators) # SyntaxError: invalid syntax x = y = z+= 2

Çıktı

 Dosya "", satır 8 x = y = z + = 2 Sözdizimi Hatası: geçersiz sözdizimi

Ilginç makaleler...