La clase collections.defaultdict
toma una fábrica predeterminada, utilizada para generar un valor predeterminado.
Si los valores contenidos en el dict
objeto -like deberían ser predeterminados False
, la instancia se puede crear como:
d_false = defaultdict(bool)
¿Cuál es la forma más pitónica de lograr lo mismo para un valor predeterminado de True
?
En otros términos, ¿hay un retorno de objeto invocable estándar True
que se utiliza idiomáticamente como pariente de bool
?
Por supuesto, la fábrica podría construirse como una expresión lambda:
d_true = defaultdict(lambda: True)
pero esto podría estar reinventando la rueda.
lambda: True
está bien siempre y cuando no necesite encurtir ese defecto predeterminado.int() == 0
,list() == []
,str() == ''
, etc. Así que no creo que haya una manera estándar de hacer esto.lambda: value
construcción es la forma idiomática pitónica de construir un dict con un valor estático predeterminado; No conozco una forma más simple de hacer que una función regreseTrue
.object()
es Truthy - no estoy seguro si eso es útilRespuestas:
Bueno, tu puedes hacer
pero yo personalmente iría con el
lambda: True
.fuente
pickle
imponer por defecto una lambda; así que si eso es una consideración,True.__bool__
es el camino a seguir. Pero definitivamente es una solución más fea. (Además, no está disponible en Python 2.x, lo que probablemente no importa mucho con solo un mes hasta que pase EOL ...)Podríamos usar
partial
como alternativa alambda
:(Que también es compatible con Python 2).
fuente
Si solo desea un valor "verdadero", puede usarlo
object
; ese constructor devuelve un objeto que se evalúa como verdadero en un contexto booleano. Pero si quieres el valor booleano realTrue
, no conozco una mejor manera que lalambda: True
construcción.Sin embargo, como dijo Aran-Frey anteriormente, no se puede determinar por
pickle
defecto cuál fábrica es unalambda
; si eso es una consideración, iría con la solución de Andrej KeselyTrue.__bool__
.fuente