Dalam tutorial ini, Anda akan belajar bagaimana prioritas dan asosiativitas operator memengaruhi urutan operasi dengan Python.
Diutamakan dari Operator Python
Kombinasi nilai, variabel, operator, dan pemanggilan fungsi disebut sebagai ekspresi. Penerjemah Python dapat mengevaluasi ekspresi yang valid.
Sebagai contoh:
>>> 5 - 7 -2
Ini 5 - 7
ungkapannya. Ada lebih dari satu operator dalam sebuah ekspresi.
Untuk mengevaluasi jenis ekspresi ini, ada aturan prioritas dalam Python. Ini memandu urutan operasi ini dilakukan.
Misalnya, perkalian memiliki prioritas lebih tinggi daripada pengurangan.
# Multiplication has higher precedence # than subtraction >>> 10 - 4 * 2 2
Tapi kita bisa mengubah urutan ini menggunakan tanda kurung ()
karena memiliki prioritas yang lebih tinggi daripada perkalian.
# Parentheses () has higher precedence >>> (10 - 4) * 2 12
Prioritas operator di Python tercantum dalam tabel berikut. Itu dalam urutan menurun (kelompok atas memiliki prioritas lebih tinggi daripada yang lebih rendah).
Operator | Berarti |
---|---|
() | Tanda kurung |
** | Eksponen |
+x , -x ,~x | Plus unary, minus Unary, Bitwise NOT |
* , / , // ,% | Perkalian, Divisi, Divisi Lantai, Modulus |
+ , - | Penjumlahan, Pengurangan |
<< , >> | Operator pergeseran bitwise |
& | Bitwise DAN |
^ | Bitwise XOR |
| | Bitwise ATAU |
== , != , > , >= , < , <= , is , is not , in ,not in | Perbandingan, Identitas, Operator Keanggotaan |
not | TIDAK logis |
and | DAN logis |
or | Logis ATAU |
Mari kita lihat beberapa contoh:
Misalkan kita sedang membangun if… else
blok yang berjalan if
saat makan siang berupa buah atau sandwich dan hanya jika uang 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")
Keluaran
Makan siang diantar
Program ini menjalankan if
blok bahkan ketika uang adalah 0. Program ini tidak memberi kita output yang diinginkan karena prioritas and
lebih tinggi dari or
.
Kita bisa mendapatkan output yang diinginkan dengan menggunakan tanda kurung ()
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")
Keluaran
Tidak bisa mengantarkan makan siang
Asosiasi Operator Python
Kita dapat melihat pada tabel di atas bahwa ada lebih dari satu operator dalam grup yang sama. Operator tersebut memiliki prioritas yang sama.
Ketika dua operator memiliki prioritas yang sama, asosiativitas membantu menentukan urutan operasi.
Asosiatif adalah urutan di mana ekspresi dievaluasi yang memiliki beberapa operator dengan prioritas yang sama. Hampir semua operator memiliki asosiasi kiri-ke-kanan.
Misalnya, perkalian dan pembagian lantai memiliki prioritas yang sama. Oleh karena itu, jika keduanya ada dalam ekspresi, ekspresi kiri dievaluasi terlebih dahulu.
# Left-right associativity # Output: 3 print(5 * 2 // 3) # Shows left-right associativity # Output: 0 print(5 * (2 // 3))
Keluaran
3 0
Catatan : Operator eksponen **
memiliki asosiasi kanan-ke-kiri dalam 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 bahwa 2 ** 3 ** 2
itu setara dengan 2 ** (3 ** 2)
.
Operator non asosiatif
Beberapa operator seperti operator penugasan dan operator pembanding tidak memiliki asosiasi dengan Python. Ada aturan terpisah untuk urutan jenis operator ini dan tidak dapat diekspresikan sebagai asosiativitas.
Misalnya, x < y < z
tidak berarti (x < y) < z
atau x < (y < z)
. x < y < z
setara dengan x < y and y < z
, dan dievaluasi dari kiri ke kanan.
Selain itu, sementara rangkaian tugas seperti x = y = z = 1
valid sempurna, x = y = z+= 2
akan menghasilkan kesalahan.
# Initialize x, y, z x = y = z = 1 # Expression is invalid # (Non-associative operators) # SyntaxError: invalid syntax x = y = z+= 2
Keluaran
File "", baris 8 x = y = z + = 2 SyntaxError: sintaks tidak valid