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 - 7
bir 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 if
para 0 bile olsa blok çalıştırır . 'Nin önceliği' and
den 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 ** 2
eş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 < z
ne anlamı (x < y) < z
ne de x < (y < z)
. x < y < z
eşdeğerdir x < y and y < z
ve soldan sağa doğru değerlendirilir.
Ayrıca, atamaların zincirlenmesi x = y = z = 1
tamamen geçerliyken, x = y = z+= 2
hataya 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