Dalam tutorial ini, anda akan mengetahui bagaimana keutamaan dan kaitan operator mempengaruhi susunan operasi di Python.
Keutamaan Pengendali Python
Kombinasi nilai, pemboleh ubah, operator, dan panggilan fungsi disebut sebagai ungkapan. Jurubahasa Python dapat menilai ungkapan yang sah.
Sebagai contoh:
>>> 5 - 7 -2
Inilah 5 - 7
ungkapan. Terdapat lebih daripada satu pengendali dalam ekspresi.
Untuk menilai jenis ungkapan ini terdapat peraturan yang diutamakan dalam Python. Ia membimbing urutan operasi ini.
Sebagai contoh, pendaraban mempunyai keutamaan yang lebih tinggi daripada pengurangan.
# Multiplication has higher precedence # than subtraction >>> 10 - 4 * 2 2
Tetapi kita boleh mengubah susunan ini menggunakan tanda kurung ()
kerana ia mempunyai keutamaan yang lebih tinggi daripada pendaraban.
# Parentheses () has higher precedence >>> (10 - 4) * 2 12
Keutamaan pengendali di Python disenaraikan dalam jadual berikut. Ia berada dalam urutan menurun (kumpulan atas mempunyai keutamaan yang lebih tinggi daripada yang lebih rendah).
Pengendali | Makna |
---|---|
() | Tanda kurung |
** | Eksponen |
+x , -x ,~x | Unary plus, Unary minus, Bitwise TIDAK |
* , / , // ,% | Pendaraban, Pembahagian, Pembahagian lantai, Modulus |
+ , - | Penambahan, Pengurangan |
<< , >> | Pengendali peralihan bitwise |
& | Sedikit demi sedikit DAN |
^ | Bitwise XOR |
| | Sedikit demi sedikit ATAU |
== , != , > , >= , < , <= , is , is not , in ,not in | Perbandingan, Identiti, Keahlian pengendali |
not | Logik TIDAK |
and | Logik DAN |
or | Logik ATAU |
Mari lihat beberapa contoh:
Katakan kita sedang membina if… else
blok yang berjalan if
ketika makan tengah hari adalah buah atau sandwic dan hanya jika wang lebih dari atau sama dengan 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")
Pengeluaran
Makan tengah hari sedang disampaikan
Program ini berjalan if
lancar walaupun wangnya 0. Tidak memberi kita output yang diingini kerana keutamaan and
lebih tinggi daripada or
.
Kita boleh mendapatkan output yang diinginkan dengan menggunakan kurungan ()
dengan cara berikut:
# 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")
Pengeluaran
Tidak dapat menghantar makan tengah hari
Keterkaitan Pengendali Python
Kita dapat melihat dalam jadual di atas bahawa lebih daripada satu pengendali wujud dalam kumpulan yang sama. Pengendali ini mempunyai keutamaan yang sama.
Apabila dua pengendali mempunyai keutamaan yang sama, keterkaitan membantu menentukan susunan operasi.
Keterkaitan adalah urutan di mana ungkapan dinilai yang mempunyai banyak pengendali yang mempunyai keutamaan yang sama. Hampir semua pengendali mempunyai kaitan kiri-kanan
Contohnya, pendaraban dan pembahagian lantai mempunyai keutamaan yang sama. Oleh itu, jika kedua-duanya hadir dalam ekspresi, yang kiri dinilai terlebih dahulu.
# Left-right associativity # Output: 3 print(5 * 2 // 3) # Shows left-right associativity # Output: 0 print(5 * (2 // 3))
Pengeluaran
3 0
Catatan : Pengendali eksponen **
mempunyai kaitan antara kanan ke kiri di Python.
# 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)
Kita dapat melihat bahawa 2 ** 3 ** 2
setara dengan 2 ** (3 ** 2)
.
Pengendali bukan bersekutu
Beberapa pengendali seperti pengendali tugasan dan operator perbandingan tidak mempunyai kaitan dalam Python. Terdapat peraturan yang berasingan untuk urutan pengendali jenis ini dan tidak boleh dinyatakan sebagai kesatuan.
Contohnya, x < y < z
tidak bermaksud (x < y) < z
atau tidak x < (y < z)
. x < y < z
setara dengan x < y and y < z
, dan dinilai dari kiri ke kanan.
Selanjutnya, walaupun rantai tugas seperti x = y = z = 1
berlaku dengan sempurna, x = y = z+= 2
akan mengakibatkan kesilapan.
# Initialize x, y, z x = y = z = 1 # Expression is invalid # (Non-associative operators) # SyntaxError: invalid syntax x = y = z+= 2
Pengeluaran
Fail "", baris 8 x = y = z + = 2 SyntaxError: sintaks tidak sah