Aku hanya datang untuk tahu ada truthy dan falsy nilai dalam python yang berbeda dari normal True
dan False
?
Dapatkah seseorang tolong jelaskan secara mendalam apa yang truthy dan falsy nilai-nilai?
Di mana saya harus menggunakannya?
Apa perbedaan antara kebenaran dan True
nilai dan kepalsuan dan False
nilai?
bool(value)
hasil dalamTrue
, makavalue
adalah truthy .__nonzero__
dan__bool__
Jawaban:
Seperti yang dijelaskan dalam komentar, ini hanya merujuk ke nilai yang dievaluasi ke True atau False.
Misalnya, untuk melihat apakah daftar tidak kosong, daripada memeriksa seperti ini:
Anda cukup melakukan ini:
Ini karena beberapa nilai, seperti daftar kosong, dianggap False saat dievaluasi untuk nilai boolean. Daftar yang tidak kosong adalah True.
Demikian pula untuk integer 0, string kosong "", dan seterusnya, untuk False, dan integer bukan nol, string tidak kosong, dan seterusnya, untuk True.
Ide istilah seperti "truthy" dan "falsy" merujuk pada nilai-nilai yang dianggap Benar dalam kasus-kasus seperti yang dijelaskan di atas, dan yang dianggap Salah.
Misalnya, daftar kosong (
[]
) dianggap "salah", dan daftar yang tidak kosong (misalnya,[1]
) dianggap "benar".Lihat juga bagian dokumentasi ini .
sumber
if my_list
berarti "jika daftar_saya tidak kosong", danif not my_list
berarti "jika daftar_saya kosong".if a:
apa artinya kondisi seperti ini? apakah itu berarti jika a benar atau berarti jika a salah? atau itu berarti jika a benar atau jika salah?if []:
tidak akan pernah mengeksekusi.Semua nilai dianggap "benar" kecuali yang berikut ini, yang "salah":
None
False
0
0.0
0j
Decimal(0)
Fraction(0, 1)
[]
- kosonglist
{}
- kosongdict
()
- kosongtuple
''
- kosongstr
b''
- kosongbytes
set()
- kosongset
range
, sepertirange(0)
obj.__bool__()
kembaliFalse
obj.__len__()
kembali0
Nilai "kebenaran" akan memenuhi pemeriksaan yang dilakukan oleh pernyataan
if
atauwhile
. Kami menggunakan "kebenaran" dan "salah" untuk membedakan daribool
nilaiTrue
danFalse
.Pengujian Nilai Kebenaran
sumber
__bool__
pertama, lalu__len__
. Jika tidak ada yang ditentukan, semua contoh dianggap "benar". Ini dibahas dalam dokumen untukobject.__bool__
metode tersebuttimedelta(0)
itu seperti nol. Hal ini muncul ketika ditemukan bahwa nilai waktu yang mewakili tengah malam salah, yang akhirnya diperbaiki: lwn.net/Articles/590299Nilai kebenaran merujuk ke objek yang digunakan dalam konteks boolean dan bukan nilai boolean yang mengembalikan true atau false. Ambil ini sebagai contoh:
sumber
Python menentukan kebenaran dengan menerapkan
bool()
tipe, yang mengembalikanTrue
atauFalse
yang digunakan dalam ekspresi sepertiif
atauwhile
.Berikut adalah contoh untuk custom class
Vector2d
dan instance itu kembaliFalse
ketika magnitude (panjang vektor) adalah 0, jika tidakTrue
.Catatan: Jika kita tidak mendefinisikannya,
__bool__
itu akan selalu mengembalikan True, karena instance dari kelas yang ditentukan pengguna dianggap benar secara default.Contoh dari buku: "Fasih dengan Python, pemrograman yang jelas, ringkas dan efektif"
sumber
Di mana Anda sebaiknya menggunakan nilai Truthy atau Falsy? Ini adalah gula sintaksis , jadi Anda selalu dapat menghindarinya, tetapi menggunakannya dapat membuat kode Anda lebih mudah dibaca dan membuat Anda lebih efisien. Selain itu, Anda akan menemukannya di banyak contoh kode, baik di python atau tidak, karena dianggap praktik yang baik.
Seperti yang disebutkan dalam jawaban lain, Anda dapat menggunakannya di if tes dan while loop. Berikut adalah dua contoh lain di python 3 dengan nilai default yang digabungkan dengan
or
,s
menjadi variabel string. Anda juga akan mengembangkan situasi serupa.Tanpa kejujuran
sejujurnya ini lebih ringkas:
Di python 3.8, kita bisa memanfaatkan ekspresi tugas
:=
tanpa kejujuran
sejujurnya itu juga lebih pendek
atau bahkan lebih pendek,
Tanpa ekspresi tugas, seseorang bisa melakukannya
tapi tidak lebih pendek. Beberapa orang menganggap
s =...
garis tersebut tidak memuaskan karena sesuai dengannamun Anda dapat mengikuti gaya pengkodean ini jika Anda merasa nyaman dengannya.
sumber
Jika Anda menjalankan perulangan ini, Anda akan melihat bahwa while 0: = while false:
0 dianggap salah
sumber
Falsy berarti sesuatu yang kosong seperti daftar kosong, tuple, karena tipe data apa pun yang memiliki nilai kosong atau Tidak Ada. Truthy artinya: Kecuali adalah Truthy
sumber