Presedensi dan Asosiatif Operator dengan Python

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 - 7ungkapannya. 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… elseblok yang berjalan ifsaat 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 ifblok bahkan ketika uang adalah 0. Program ini tidak memberi kita output yang diinginkan karena prioritas andlebih 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 ** 2itu 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 < ztidak berarti (x < y) < zatau x < (y < z). x < y < zsetara dengan x < y and y < z, dan dievaluasi dari kiri ke kanan.

Selain itu, sementara rangkaian tugas seperti x = y = z = 1valid sempurna, x = y = z+= 2akan 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

Artikel yang menarik...