A classe collections.defaultdict
usa uma fábrica padrão, usada para gerar um valor padrão.
Se os valores contidos no dict
objeto -like forem padronizados False
, a instância poderá ser criada como:
d_false = defaultdict(bool)
Qual é a maneira mais pitônica de conseguir o mesmo com um valor padrão de True
?
Em outros termos, existe um objeto padrão True
que pode ser retornado que é usado idiomaticamente como parente de bool
?
Obviamente, a fábrica poderia ser construída como uma expressão lambda:
d_true = defaultdict(lambda: True)
mas isso pode estar reinventando a roda.
lambda: True
é bom, desde que você não precise escolher esse padrão.int() == 0
,list() == []
,str() == ''
, etc. Então eu não acho que há uma maneira padrão para fazer isso.lambda: value
construção é a maneira Python idiomática de construir um ditado com um valor padrão estático; Não conheço nenhuma maneira mais simples de obter uma função retornandoTrue
.object()
é truthy - não tenho certeza se isso é útilRespostas:
Bem, você pode fazer
mas eu pessoalmente iria com o
lambda: True
.fonte
pickle
usar um padrão com um lambda; então, se isso é uma consideração,True.__bool__
é o caminho a percorrer. Mas é definitivamente uma solução mais feia. (Também, não disponível em Python 2.x, o que provavelmente não importa muito com apenas um mês até que ele vai EOL ...)Nós poderíamos usar
partial
como uma alternativa paralambda
:(O que também é compatível com o Python 2.)
fonte
Se você quer apenas um valor "verdade", você pode usar
object
; esse construtor retorna um objeto que é avaliado como verdadeiro em um contexto booleano. Mas se você deseja o valor booleano realTrue
, não conheço uma maneira melhor do que alambda: True
construção.Como Aran-Frey disse acima, no entanto, você não pode
pickle
definir um ditado cuja fábrica é alambda
; se isso é uma consideração, eu aceitaria a solução de Andrej KeselyTrue.__bool__
.fonte