Urutan Prioritas Operator
Prioritas operator menentukan cara Python mengelompokkan ekspresi ketika tanda kurung tidak menyatakannya secara langsung. Aturan ini menjelaskan pengelompokan ekspresi. Python mengevaluasi operand dari kiri ke kanan. Prioritas menentukan bagaimana operasi atas operand itu dikelompokkan.
Pada perpangkatan, operator unary di kanan diperlakukan khusus: 2 ** -1 berarti 2 ** (-1) dan bernilai 0.5. Sebaliknya, -2 ** 2 berarti -(2 ** 2) dan bernilai -4.
Operator dengan prioritas lebih tinggi mengikat operand lebih kuat. Sebagian besar operator biner pada level yang sama mengelompok dari kiri ke kanan, tetapi perpangkatan mengelompok dari kanan ke kiri dan perbandingan membentuk rantai. Gunakan tanda kurung jika pengelompokan yang dimaksud mungkin tidak langsung terbaca.
Operator Perbandingan
Operator perbandingan digunakan untuk membandingkan dua nilai dan menghasilkan nilai boolean (True atau False). Operator perbandingan yang tersedia dalam Python:
==sama dengan!=tidak sama dengan<kurang dari<=kurang dari atau sama dengan>lebih dari>=lebih dari atau sama dengan
Perbandingan nilai bawaan seperti angka dan string menghasilkan nilai boolean. Objek buatan sendiri dapat mendefinisikan hasil perbandingan lain. Kesetaraan dapat membandingkan objek dari tipe berbeda, tetapi perbandingan urutan seperti < membutuhkan tipe yang mendefinisikan urutan kompatibel dan dapat menghasilkan TypeError jika tidak. Operator perbandingan berbagi satu level prioritas dan dapat dirangkai.
# Contoh penggunaan operator perbandingan
>>> 4 == 5
False
>>> 3 > 2.1 # Python mendukung perbandingan numerik campuran ini
TrueOperator Boolean
Operator boolean menggabungkan beberapa kondisi atau mengubah nilai boolean. Python menyediakan tiga operator boolean utama:
-
Operator
andmengembalikan nilai pertama jika bernilai false, atau nilai kedua jika nilai pertama bernilai true. -
Operator
ormengembalikan nilai pertama jika bernilai true, atau nilai kedua jika nilai pertama bernilai false. -
Operator
notberbeda dari operatoranddanorkarena selalu menghasilkan nilai boolean baru.
# Contoh operator boolean
>>> 4.0 and 5.0 # 4.0 truthy, lalu mengembalikan 5.0 tanpa perlu menguji kebenaran 5.0
5.0
>>> 0 and 5 # mengevaluasi 0 sebagai false, mengembalikan 0 (short-circuit)
0
>>> 4.0 or 5.0 # mengevaluasi 4.0 sebagai true, mengembalikan 4.0 (short-circuit)
4.0
>>> 0 or 5 # 0 falsy, lalu mengembalikan 5 tanpa perlu menguji kebenaran 5
5
>>> not 4.0 # mengevaluasi 4.0 sebagai true, mengembalikan False
False
>>> not 0 # mengevaluasi 0 sebagai false, mengembalikan True
TrueOperator and dan or menggunakan evaluasi short-circuit, yang berarti evaluasi berhenti ketika hasil sudah dapat ditentukan tanpa mengevaluasi semua operand. Keduanya mengembalikan argumen terakhir yang dievaluasi, sedangkan operator not selalu membuat nilai boolean baru.
Nilai dalam Konteks Boolean
Semua objek Python bisa menjalani pengujian kebenaran, termasuk objek yang bukan nilai True dan False. Python kemudian menentukan sendiri nilai mana yang dianggap salah. Dengan aturan tersebut, list kosong, bilangan nol, dan string kosong semuanya bersikap seperti False di dalam if, sedangkan wadah yang tidak kosong bersikap seperti True.
Nilai Falsy dan Truthy
Nilai bawaan berikut memiliki aturan truthiness yang dapat kamu uji dengan bool().
| Kelompok | Contoh falsy | Contoh truthy |
|---|---|---|
| Boolean | False | True |
| Nilai kosong | None | Tidak berlaku |
| Bilangan | 0, 0.0, 0j | -1, 0.5, 2j |
| String | "" | "0" |
| Container | [], {}, (), set() | [0], {"a": 0} |
String "0" dan list [0] tetap truthy karena tidak kosong. Nilai elemen di dalam container tidak menentukan truthiness container bawaan.
Objek buatan sendiri dapat mengatur pengujian kebenaran melalui __bool__() atau __len__(). Jika keduanya tidak didefinisikan, objek tersebut dianggap benar.
Tipe Data Boolean
Tipe bool dalam Python merepresentasikan nilai kebenaran False dan True, merupakan subtipe dari integer (int), dan boolean berperilaku seperti dan dalam operasi matematika.
# Constructor bool dan operasi aritmatika
>>> bool(-1)
True
>>> bool(0.0)
False
>>> True + True
2
>>> 3 * False
0Menggabungkan Operator
Kamu dapat menggabungkan operator perbandingan dengan operator boolean untuk membuat kondisi gabungan. Python juga mendukung rantai perbandingan yang ringkas seperti 1 < 2 < 3.
# Contoh penggabungan operator
>>> 4.0 > 3 and 2 >= 3 # ⇔ True and False
False
>>> 7 < 6 or 4 != 2 # ⇔ False or True
True
>>> not 0 < 2 # ⇔ not (0 < 2) ⇔ not True
False
# Rantai perbandingan
>>> 1 < 2 < 3 # ⇔ (1 < 2) and (2 < 3)
True
>>> 5 <= 7 < 10 # ⇔ (5 <= 7) and (7 < 10) --- aplikasi: tes interval
TrueMembandingkan Nilai Float
Banyak pecahan desimal tidak dapat direpresentasikan secara persis sebagai bilangan biner dengan jumlah digit terbatas. Karena hasil antara dibulatkan, dua perhitungan yang setara secara matematis dapat menghasilkan nilai float yang sangat dekat tetapi tidak sama.
Masalah Presisi Float
Pecahan desimal dapat memerlukan pembulatan dalam biner. Diagram berikut membedakan nilai yang dapat disimpan tepat dari nilai yang perlu dibulatkan.
# Masalah presisi floating point
>>> a = 0.01
>>> b = 0.1**2 # b adalah 0.010000000000000002
>>> a == b
False
# Solusi dengan math.isclose()
>>> import math
>>> math.isclose(0.01, 0.1**2)
True
>>> math.isclose(100, 95, rel_tol=0.05) # toleransi relatif adalah 5%
True
>>> math.isclose(100, 95, abs_tol=5) # toleransi absolut adalah 5
TrueSolusi dengan Fungsi Isclose
Python menyediakan fungsi math.isclose(a, b, rel_tol=1e-09, abs_tol=0.0) untuk menguji kesetaraan aproksimasi. Fungsi ini menggunakan toleransi relatif dan absolut melalui rel_tol dan abs_tol untuk menentukan apakah dua nilai cukup dekat.
Untuk contoh math.isclose(100, 95, rel_tol=0.05), selisih absolut adalah 5. Toleransi relatif memakai nilai absolut yang lebih besar, yaitu 100.
Karena selisih tidak melebihi toleransi, hasilnya True. Pada abs_tol=5, batas absolut 5 juga cukup untuk menerima selisih tersebut.
Gunakan kesetaraan persis hanya jika nilai
floatmemang harus identik. Untuk hasil pengukuran atau perhitungan, tentukan toleransi yang sesuai dengan jenis perhitungan lalu gunakanmath.isclose(). Saat nilai yang dibandingkan mendekati nol, tentukanabs_tolkarena toleransi relatif juga mengecil.