Kelas collections.defaultdict
mengambil pabrik default, yang digunakan untuk menghasilkan nilai default.
Jika nilai-nilai yang terkandung dalam objek- dict
like seharusnya default False
, instance dapat dibuat sebagai:
d_false = defaultdict(bool)
Apa cara paling pythonic untuk mencapai hal yang sama untuk nilai default True
?
Dengan kata lain, apakah ada objek callable standar True
yang kembali yang secara idiomatis digunakan sebagai kerabat bool
?
Tentu saja, pabrik dapat dibangun sebagai ungkapan lambda:
d_true = defaultdict(lambda: True)
tapi ini mungkin menciptakan kembali kemudi.
lambda: True
tidak apa-apa asalkan Anda tidak perlu acar defaultdict itu.int() == 0
,list() == []
,str() == ''
, dll Jadi saya tidak berpikir ada cara standar untuk melakukan hal ini.lambda: value
konstruk adalah cara idiomatik Pythonic untuk membangun dict dengan nilai default statis; Saya tahu tidak ada cara sederhana untuk mendapatkan fungsi kembaliTrue
.object()
benar - tidak yakin apakah itu bergunaJawaban:
Nah, Anda bisa melakukannya
tapi saya pribadi akan pergi dengan
lambda: True
.sumber
pickle
menetapkan default dengan lambda; jadi jika itu pertimbangan,True.__bool__
adalah jalan yang harus ditempuh. Tapi itu jelas merupakan solusi yang lebih buruk. (Juga, tidak tersedia dalam Python 2.x, yang mungkin tidak terlalu menjadi masalah hanya dengan satu bulan sampai EOL ...)Kita bisa menggunakan
partial
sebagai alternatif untuklambda
:(Yang juga ramah Python 2.)
sumber
Jika Anda hanya menginginkan nilai "kebenaran", Anda bisa menggunakan
object
; konstruktor yang mengembalikan objek yang dievaluasi sebagai benar dalam konteks boolean. Tetapi jika Anda ingin nilai boolean yang sebenarnyaTrue
, saya tidak tahu cara yang lebih baik daripadalambda: True
membangun.Seperti yang dikatakan Aran-Frey di atas, Anda tidak dapat
pickle
menetapkan defaultdict yang pabriknya adalahlambda
; jika itu pertimbangan, saya akan pergi dengan solusi Andrej KeselyTrue.__bool__
.sumber