2013-10-29 2 views
11

빈 튜플을 함수의 반복 가능한 인수에 대한 기본값으로 사용하면 단점이 있습니까? 함수에서 원하는 것이 불변 반복 가능한 것이라고 가정합니다. 예 :빈 튜플을 함수의 기본 iterable 인수로 사용합니다.

def foo(a, b=()): 
    print a 
    for x in b: 
    print x 

이 사용 사례의 사례를 많이 찾을 수 없습니다.

+0

이 기능은'for' 루프의 외부에 아무것도 할 수 있나요 : 인수가 설정되지 않은 경우 기본 인수

일반적인 접근 방식은 완벽하게 명확하게 없음로 설정하는 것입니다 ? – DSM

+0

아니요, 당신이 함수에서 원하는 것은 불변의 반복 가능하다고 가정합니다. – Ben

+1

내가 누락 된 것이 있습니까? 기본 인수가 사용되는 유일한 방법은 인자없이'foo'를 수동으로'foo()'로 호출하는 것입니다. 그러나 iterable이 비어 있지 않은 경우에만 함수가 아무 것도 수행하지 않는다는 것을 안다면 왜 그걸 쓸 것입니까? – DSM

답변

9

불변의 반복 가능한 (iterable) 필요가있을 때 어떤 단점도 생각할 수 없습니다. 나는 default_list=Nonedefault_list = default_list or None 패턴이 변경 가능한 iterables에 사용되는 것이기 때문에 사용되지 않는다고 생각한다. 그리고 iterable이 불변 일 때 자주 발생하지 않는 케이스에서 사람들은 그것을 바꿀 필요가 없다. . 변경 가능한 기본 인수와 마찬가지로 예기치 않은 동작은 없습니다.

1

기본값을 변경 불가능한 빈 튜플로 디자인 할 때 고유 한 문제는 없습니다. 그러나 직관적이지 않은 디자인 접근법으로 간주 될 수 있습니다. 튜플의 특정 위치를 참조하면 예외가 발생합니다. 인수 검사를 작성할 때주의를 기울이면 문제가되지 않지만 코드의 나머지 부분을 빌드하여 특정 위치의 데이터를 예상하고 튜플이 비어 있는지 확인하지 않으면 오류가 발생합니다.

당신의 목표가 논쟁의 목적에 달려 있습니다. 빈리스트는 디폴트 인자 (적어도 어떤 식 으로든리스트를 수정하는 것들)에 대해 더 명백한 어플리케이션을 가질 것이지만, 빈 불변 튜플은 아무런 인자도 주어지지 않았다는 것을 나타내는 것 외에 디폴트로서 직관적 인 용도를 가지지 않을 것이다.

def foo(a, b=None): 
관련 문제