2012-12-10 3 views
5

x={} 형식의 기본 인수를 사용하면 호출되지 않고 함수가 정의 될 때 기본 인수가 바인딩되기 때문에 일반적으로 Python에서 의도 한 목적을 달성하지 못합니다.빈 사전을 기본 인수로 사용하는 가장 Python적인 방법은 무엇입니까?

규칙은 x=None으로 기본 인수로 변경 가능한 개체를 설정 한 다음 해당 함수가 호출 될 때 적절한 기본값을 할당하려면 x is None을 확인하는 것입니다. 나는 기본적으로 비어 사전에 x 캐스팅하려는 경우

그래서, 나는 다음과 같은 것을 사용하는 것이 : 어떤 반복자를 취할 수 dict 때문에, 그러나

def f(x=None): 
    x = dict(x) if x is not None else {} 

, 나는이 쓸 수 더 간결한 버전 :

이 "오른쪽"접근이 중입니다
def f(x=()): 
    x = dict(x) 

?

답변

6

관용적에게 (즉, 두 번째 잘못, 또는 나쁜, 또는 악화 등을하지 않음) 첫 번째는 더 관용적이다라고 말하고 싶지만 스타일은 이 아니며dict으로 캐스팅하지 않습니다. 그런 식으로 누군가가 개체를 사용하여 올바른 매핑 방법을 구현할 수 있습니다.

그래서, 대부분의 파이썬 방법은 사용하는 것입니다

def f(x=None): 
    if x is None: 
     x = {} 

을 한 후 바로 매핑 방법을 사용합니다.

따라서 일반적으로 인수를 사전에 넣지 않아야합니다. API 이 대신 매핑 개체을 허용하고 호출자가 캐스팅을 수행 할 것으로 기대합니다.

dict과 iterable을 모두 허용하는 유일한 이유는 urllib.urlencode function과 같이 중복 키가 허용되는 순서화 된 키 - 값 쌍을 지원하려는 경우입니다. 이 경우 dict은 해당 정보를 보유 할 수 없으며 해당 메소드는 반복 가능을 사전으로 변환하지 않고 대신 사전을 반복 가능으로 사용합니다.

1

이 권리 또는 여기에 잘못 대답은 아니지만, 내가

관련 문제