Класс collections.defaultdict
принимает фабрику по умолчанию, используемую для генерации значения по умолчанию.
Если значения, содержащиеся в dict
объекте -like, должны иметь значение по умолчанию False
, экземпляр может быть создан как:
d_false = defaultdict(bool)
Какой самый питонный способ добиться того же для значения по умолчанию True
?
Другими словами, есть ли возвращаемый стандартный вызываемый объект, True
который идиоматически используется как относительное значение bool
?
Конечно, фабрика может быть построена как лямбда-выражение:
d_true = defaultdict(lambda: True)
но это может быть изобретением колеса.
lambda: True
это хорошо, если вам не нужно мариновать этот defaultdict.int() == 0
,list() == []
,str() == ''
и т.д. Так что я не думаю , что есть стандартный способ сделать это.lambda: value
Конструкция является идиоматическим Pythonic способом построить Dict со статическим значением по умолчанию; Я не знаю более простого способа вернуть функциюTrue
.object()
правдивым - не уверен, что это полезноОтветы:
Ну, вы можете сделать
но я лично пошел бы с
lambda: True
.источник
pickle
использовать лямбду по умолчанию; так что, если это соображение,True.__bool__
это путь. Но это определенно уродливое решение. (Кроме того, недоступно в Python 2.x, который, вероятно, не имеет большого значения только через месяц, пока не выйдет EOL ...)Мы могли бы использовать
partial
в качестве альтернативыlambda
:(Что также является дружественным для Python 2.)
источник
Если вы просто хотите получить «истинное» значение, вы можете использовать
object
; этот конструктор возвращает объект, который оценивается как истинный в логическом контексте. Но если вы хотите фактическое логическое значениеTrue
, я не знаю лучшего способа, чемlambda: True
конструкция.Как сказал Аран-Фрей выше, вы не можете
pickle
по умолчанию считать, чья фабрика являетсяlambda
; если это соображение, я бы пошел с решением Андрея КеселияTrue.__bool__
.источник