Klasa collections.defaultdict
przyjmuje domyślną fabrykę, służącą do generowania wartości domyślnej.
Jeśli wartości zawarte w dict
podobnym obiekcie powinny mieć wartość domyślną False
, instancję można utworzyć jako:
d_false = defaultdict(bool)
Jaki jest najbardziej pytonowy sposób osiągnięcia tego samego dla wartości domyślnej True
?
Innymi słowy, czy jest zwracany standardowy obiekt na żądanie True
który jest idiomatycznie używany jako krewny bool
?
Oczywiście fabrykę można zbudować jako wyrażenie lambda:
d_true = defaultdict(lambda: True)
ale to może być wynalezienie koła na nowo.
lambda: True
jest w porządku, o ile nie musisz marynować tego domyślnego nakazu.int() == 0
,list() == []
,str() == ''
, itd. Więc nie sądzę, jest to standardowy sposób to zrobić.lambda: value
Konstrukt jest idiomatyczne pythonowy sposób skonstruować dict ze statycznym wartości domyślnej; Nie znam prostszego sposobu na zwrócenie funkcjiTrue
.object()
być prawdą - nie jestem pewien, czy to jest przydatneOdpowiedzi:
Cóż, możesz zrobić
ale ja osobiście poszedłbym z
lambda: True
.źródło
pickle
domyślnego zdania z lambda; więc jeśli jest to rozważanie,True.__bool__
jest to właściwa droga. Ale to zdecydowanie brzydsze rozwiązanie. (Również niedostępne w Pythonie 2.x, co prawdopodobnie nie ma większego znaczenia po zaledwie miesiącu, aż przejdzie do EOL ...)Możemy użyć
partial
jako alternatywy dlalambda
:(Który jest również przyjazny dla Python 2).
źródło
Jeśli chcesz tylko „prawdziwej” wartości, możesz użyć
object
; ten konstruktor zwraca obiekt, który ma wartość true w kontekście logicznym. Ale jeśli chcesz rzeczywistą wartość logicznąTrue
, nie znam lepszego sposobu niżlambda: True
konstrukcja.Jak jednak powiedziano powyżej Aran-Frey, nie można
pickle
domyślnego nakazu, którego fabryką jestlambda
; jeśli to rozważanie, wybrałbym rozwiązanie Andreja Kesely'egoTrue.__bool__
.źródło