La classe collections.defaultdict
prend une fabrique par défaut, utilisée pour générer une valeur par défaut.
Si les valeurs contenues dans l' dict
objet -like doivent avoir la valeur par défaut False
, l'instance peut être créée comme suit:
d_false = defaultdict(bool)
Quelle est la manière la plus pythonique d'obtenir la même chose pour une valeur par défaut de True
?
En d'autres termes, existe-t-il un objet appelable standard retournant True
qui est utilisé de manière idiomatique comme parent de bool
?
Bien sûr, l'usine pourrait être construite comme une expression lambda:
d_true = defaultdict(lambda: True)
mais cela pourrait réinventer la roue.
lambda: True
est bien tant que vous n'avez pas besoin de décaper ce défaut.int() == 0
,list() == []
,str() == ''
, etc. Je ne pense pas qu'il y ait un moyen standard pour le faire.lambda: value
construction est la manière idiomatique Pythonic de construire un dict avec une valeur statique par défaut; Je ne connais aucun moyen plus simple d'obtenir le retour d'une fonctionTrue
.object()
c'est vrai - je ne sais pas si c'est utileRéponses:
Eh bien, vous pouvez le faire
mais j'irais personnellement avec le
lambda: True
.la source
pickle
un defaultdict avec un lambda; donc si c'est une considération,True.__bool__
c'est la voie à suivre. Mais c'est définitivement une solution plus laide. (En outre, non disponible dans Python 2.x, ce qui n'a probablement pas beaucoup d'importance avec seulement un mois jusqu'à ce qu'il passe en fin de vie ...)Nous pourrions utiliser
partial
comme alternative àlambda
:(Qui est également compatible avec Python 2.)
la source
Si vous voulez juste une valeur "véridique", vous pouvez utiliser
object
; ce constructeur renvoie un objet qui est évalué comme vrai dans un contexte booléen. Mais si vous voulez la valeur booléenne réelleTrue
, je ne connais pas de meilleur moyen que lalambda: True
construction.Comme Aran-Frey l'a dit ci-dessus, cependant, vous ne pouvez pas
pickle
un dict par défaut dont l'usine est unlambda
; si c'est une considération, j'irais avec la solution d'Andrej KeselyTrue.__bool__
.la source