대부분의 pythonic 호출 ​​가능 True?


11

클래스 collections.defaultdict는 기본값을 생성하는 데 사용되는 기본 팩토리를 사용합니다.

dict-like 객체에 포함 된 값의 기본값이 False인 경우 인스턴스는 다음과 같이 만들 수 있습니다.

d_false = defaultdict(bool)

기본값으로 True? 를 달성하는 가장 파이썬적인 방법은 무엇입니까 ?

다른 말로하면, 표준 호출 가능 객체 반환 Truebool있습니까?

물론 공장은 람다 식으로 만들 수 있습니다.

d_true = defaultdict(lambda: True)

그러나 이것은 바퀴를 재발 명 할 수 있습니다.


6
lambda: True그 기본 결정을 피클 할 필요가 없다면 괜찮습니다.
Aran-Fey

흠, 나는 모든 내장 타입 생성자가 falsy 값을 반환 생각 : int() == 0, list() == [], str() == '', 등 나는이 작업을 수행하는 표준 방법이 생각하지 않습니다 그래서.
wjandrea

2
lambda: value구문은 정적 기본값으로 dict를 구성하는 관용적 인 Pythonic 방식입니다. 함수를 반환하는 더 간단한 방법은 없습니다 True.
Mark Reed


내 이전 의견에 따라, 밝혀 것은 object()truthy입니다 - 확실하지 그 유용 경우
wjandrea가

답변:


9

글쎄, 당신은 할 수 있습니다

d = defaultdict(True.__bool__)

그러나 나는 개인적으로 lambda: True.


4
@ Aran-Frey가 위에서 말했듯 pickle이 람다로 디폴트 를 설정할 수는 없습니다 . 그것이 고려 사항이라면 True.__bool__갈 길입니다. 그러나 그것은 확실히 추악한 해결책입니다. (또한 Python 2.x에서는 사용할 수 없으며, EOL이 진행될 때까지 한 달이면 별 문제가되지 않을 것입니다 ...)
Mark Reed

4

우리는 다음 partial의 대안으로 사용할 수 있습니다 lambda.

from functools import partial
from collections import defaultdict

d_true = defaultdict(partial(bool, True))

print(d_true['bona fide'])

(Python 2 와도 친숙합니다.)


3

"거친"값만 원한다면 object; 해당 생성자는 부울 컨텍스트에서 true로 평가되는 객체를 반환합니다. 그러나 실제 부울 값을 원한다면 구문 True보다 더 나은 방법을 모릅니다 lambda: True.

Aran-Frey가 위에서 말했듯이, 당신 pickle의 공장이 lambda; 이것이 고려 사항이라면 Andrej Kesely의 솔루션을 사용하십시오 True.__bool__.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.