2014-10-12 4 views
25

필자는 Python 함수의 선택적 인수에 빈 괄호를 넣었고 pylint (Sublime 패키지 사용)는 위험하다고 말했습니다. 누군가 이것이 왜 그런지 설명 할 수 있습니까? 대신 None을 사용하는 것이 더 나은 대안입니까?빈 사전이 파이썬에서 위험한 기본값이되는 이유는 무엇입니까?

+0

기본으로 빈 목록을 파징의 문제 인수는 함수의 모든 호출간에 공유된다는 것입니다. https://docs.python.org/3/tuto의 "Important warning"을 참조하십시오. rial/controlflow.html # default-argument-values ​​ – hamed

답변

32

함수가 인수를 수정하는 경우에만 위험합니다. 기본 인수를 수정하면 다음 호출까지 지속되므로 "비어있는"dict에 첫 번째 호출 이외의 값이 포함되기 시작합니다.

예, None을 사용하면 안전하고 일반적인 경우입니다. 예에서

+0

함수가 인수를 수정하지 않는 경우 모범 사례의 이름에 None을 기본값으로 사용해야합니까? – NightFurry

+0

@NightFurry : 여기서 아무 것도 처절하기를 주저합니다. '아니요'가 가장 좋은 선택이지만, 아마도 100 %는 아닙니다. 당신의 판단을 사용하십시오, 그러나 당신이 결정할 수없는 경우에,'None'는 안전한 내기입니다. –

35

살펴 보자 :

def f(value, key, hash={}): 
    hash[value] = key 
    return hash 

print f('a', 1) 
print f('b', 2) 

당신은 아마 출력 예상 : 실제로

{'a': 1} 
{'b': 2} 

하지만 출력 :

{'a': 1} 
{'a': 1, 'b': 2} 
+0

고마워요! 나는 이유를 얻지 않고 있었다 :) – maxadamo