54 / 59

Precedence and Associativity of Operators in Python

Python operatorlarining ustuvorligi

Qiymatlar, o'zgaruvchilar, operatorlar va funksiya chaqiruvlarining birikmasi ifoda (expression) deb ataladi. Python interpretatori to'g'ri ifodani baholay oladi.

Masalan:

example.py
>>> 5 - 7
-2

Bu yerda 5 - 7 — ifoda. Ifodada bir nechta operator bo'lishi mumkin.

Bunday turdagi ifodalarni baholash uchun Pythonda ustuvorlik (precedence) qoidasi bor. U bu amallar bajariladigan tartibni belgilaydi.

Masalan, ko'paytirish ayirishdan yuqori ustuvorlikka ega.

example.py
# Ko'paytirish
# ayirishdan yuqori ustuvorlikka ega
>>> 10 - 4 * 2
2

Lekin biz bu tartibni qavslar () yordamida o'zgartirishimiz mumkin, chunki ular ko'paytirishdan yuqori ustuvorlikka ega.

example.py
# Qavslar () yuqori ustuvorlikka ega
>>> (10 - 4) * 2
12

Pythondagi operatorlar ustuvorligi quyidagi jadvalda keltirilgan. U kamayish tartibida (yuqori guruh pastdagilardan yuqori ustuvorlikka ega).

OperatorlarMa'nosi
()Qavslar
**Daraja
+x, -x, ~xUnar plyus, Unar minus, Bitli NOT
*, /, //, %Ko'paytirish, Bo'lish, Floor division, Modul
+, -Qo'shish, Ayirish
<<, >>Bitli siljitish operatorlari
&Bitli AND
^Bitli XOR
|Bitli OR
==, !=, >, >=, <, <=, is, is not, in, not inTaqqoslash, Identity, A'zolik operatorlari
notMantiqiy NOT
andMantiqiy AND
orMantiqiy OR

Keling, bir nechta misolga qaraymiz:

Aytaylik, biz agar tushlik meva yoki sendvich bo'lsa va faqat pul 2 dan katta yoki teng bo'lsagina ishga tushadigan if...else blokini quryapmiz.

example.py
# or va and ustuvorligi
meal = "fruit"

money = 0

if meal == "fruit" or meal == "sandwich" and money >= 2:
    print("Lunch being delivered")
else:
    print("Can't deliver lunch")

Natija

kod
Lunch being delivered

Bu dastur money 0 bo'lganda ham if blokini ishga tushiradi. U bizga kerakli natijani bermaydi, chunki andning ustuvorligi ordan yuqori.

Biz kerakli natijaga quyidagi tarzda qavslar ()dan foydalanib erishishimiz mumkin:

example.py
# or va and ustuvorligi
meal = "fruit"

money = 0

if (meal == "fruit" or meal == "sandwich") and money >= 2:
    print("Lunch being delivered")
else:
    print("Can't deliver lunch")

Natija

kod
Can't deliver lunch

Python operatorlarining assotsiativligi

Yuqoridagi jadvalda bir nechta operator bir xil guruhda mavjudligini ko'rishimiz mumkin. Bu operatorlar bir xil ustuvorlikka ega.

Ikkita operator bir xil ustuvorlikka ega bo'lganda, assotsiativlik amallar tartibini aniqlashga yordam beradi.

Assotsiativlik — bir xil ustuvorlikka ega bir nechta operatorga ega ifoda qanday tartibda baholanishi. Deyarli barcha operatorlar chapdan o'ngga assotsiativlikka ega.

Masalan, ko'paytirish va floor division bir xil ustuvorlikka ega. Shuning uchun, agar ikkalasi ham ifodada mavjud bo'lsa, chapdagisi birinchi baholanadi.

example.py
# Chapdan o'ngga assotsiativlik
# Natija: 3
print(5 * 2 // 3)

# Chapdan o'ngga assotsiativlikni ko'rsatadi
# Natija: 0
print(5 * (2 // 3))

Natija

kod
3
0

Eslatma: Daraja operatori ** Pythonda o'ngdan chapga assotsiativlikka ega.

example.py
# ** ning o'ngdan chapga assotsiativligini ko'rsatadi
# Natija: 512, chunki 2**(3**2) = 2**9
print(2 ** 3 ** 2)

# Agar avval 2 darajaga ko'tarilishi kerak bo'lsa, () ishlatish kerak
# Natija: 64
print((2 ** 3) ** 2)

Ko'rishimiz mumkinki, 2 ** 3 ** 2 2 ** (3 ** 2)ga teng.

Assotsiativlikka ega bo'lmagan operatorlar

Tenglashtirish operatorlari va taqqoslash operatorlari kabi ba'zi operatorlar Pythonda assotsiativlikka ega emas. Bunday turdagi operatorlar ketma-ketligi uchun alohida qoidalar bor va ularni assotsiativlik sifatida ifodalab bo'lmaydi.

Masalan, x < y < z na (x < y) < zni, na x < (y < z)ni anglatadi. x < y < z x < y and y < zga teng va chapdan o'ngga baholanadi.

Bundan tashqari, x = y = z = 1 kabi tenglashtirishlarni zanjirlash mutlaqo to'g'ri bo'lsa-da, x = y = z+= 2 xatolikka olib keladi.

example.py
# x, y, z ni ishga tushirish
x = y = z = 1

# Ifoda yaroqsiz
# (Assotsiativ bo'lmagan operatorlar)
# SyntaxError: invalid syntax

x = y = z+= 2

Natija

kod
  File "<string>", line 8
    x = y = z+= 2
             ^
SyntaxError: invalid syntax
QBilimingizni sinab ko'ring
1 / 3

1. 10 - 4 * 2 ifodasining natijasi nechaga teng?