2014-10-01 10 views
2

, 나는 빈리스트 사용하지 않는 이유를 이해 기본 매개 변수로 :파이썬 빈의 Iterable이 방법

def some_method(self,a,b=[]): 
     for x in b: 
      etc... 

을 내가 추천 패턴이 작업을 수행하는 것을 이해 :

def some_method(self,a,b=None): 
     b = b or [] 
     for x in b: 
      etc... 

그러나 , b는 매우 명시 적으로 읽기 전용 값입니다 방법에 대해,이 (빈 튜플)를 사용하지 이유 :

def some_method(self,a,b=()): 
     for x in b: 
      etc... 

을 그것은 참조 ms이 경우에 나에게 청소기. 내가 잘못?

+0

나에게 잘 어울립니다. * 표시하지 않은 소스에 대한 참조는 표시 한 것과 동일합니까? –

+0

나는 두 사람이 약간 다른 것을 전달한다고 느낍니다. 'b = None'은''b''가 선택적 매개 변수라고 말합니다.''b''을 지정하지 않았기 때문에 다른 행동을합니다. 다른 하나는 "이 목록에 예상되는 동작을 수행하면 비어있게됩니다"입니다. – michaelb

+0

나는 당신과 함께이 사람입니다. "특별한 경우가 충분히 특별하지 않습니다." 할당 한 기본값은 이미 "선택적 매개 변수"를 전달하고 있습니다. –

답변

1

튜플 기술은 일반적이지 않지만 작동해야합니다. 당신이 진실하게 b에 쓰지 않는 경우에, 그것이 명부이기 위하여있는 것은 또한 너를 해치면 안된 ㄴ다는 것을주의하는 가치가있다.

필자가 소구할만한 이의 제기는 의미 론적으로 내 관점에서는 적어도 튜플은 균일 한 값 시퀀스보다 이상적인 레코드 (날짜/시간 구조체)를 선호한다는 것입니다.

"빈 시퀀스"와 "없음"의 의미가 다르다는 위의 michaelb에도 동의합니다.