2012-03-29 6 views
2

이 두 메서드 호출 중 어느 쪽이 가장 파이썬 적이라고 생각합니까? 그것이 내가 아주 확실하지 오전 두 라인에 대한, 한 줄에 맞는 경우 처음 2 개 이상의 라인과 첫 번째 방법에 걸쳐있는 경우Pythonic 인수 전달

some_method(that_has, very_many, aurguments=None, of_different=None, 
      kinds=u'', and_importance=None, spanning=u'multple lines'): 

또는

method_args = { 
    u'first_arg' : that_has, 
    u'second_arg' : very_many, 
    u'arguments' : None, 
    u'of_different' : None, 
    u'kinds' : u'', 
    u'and_importance' : None, 
    u'spanning' : u'multiple lines' 
} 
some_method(**method_args) 

은 개인적으로 두 번째를 선호합니다.

편집 : 전달 된 인수가 내 예제와 같이 짧고 정적이 아니 어서 상당히 긴 이름이 될 수 있습니다.

답변

2

그런 정적 호출 인 경우, 위의 코드는 더 Pythonic입니다. 당신은 (그리고 몇몇 사람들이 실제로 이렇게) 원한다면 당신이 이런 식으로 정렬 할 수 있습니다 또한

some_method(
    that_has, 
    very_many, 
    arguments=None, 
    of_different=None, 
    kinds=u'', 
    and_importance=None, 
    spanning=u'multple lines' 
) 

이 두 번째 방법은도 작동하지 않습니다 - 그것은 단지도하지 않을 수 있습니다 인수에 (키워드 인수를 전달합니다 키워드).

+0

내 게으름이 약간 불투명했을 수도 있습니다. 제가 생각한 것은이 경우와 같이 반드시 정적 일 필요는 없습니다. –

+0

@ ib.lundgren : 예제를 더 명확하게 만듭니다. – orlp

+0

하지만 개념이 작동하면 위치 인수에 대해 별도의 튜플이 필요합니다. – agf

0

더 읽기 쉬운 것은 무엇이든간에.

당신이 함수의 인수에 대한 복잡한 일정 수준에 도달하면, 실제로 그 인수를 캡슐화하는 클래스를 정의 할 가치가있을 수 있습니다 :이 인수의 수를 수정할 수있는 이점이있다

args = SomeMethodArgs() # custom args class for the some_method func 

args.x = 2 
args.y = "a string" 
args.z = None 
args.items = [a, b, c] 

some_method(args) 

또는 서명은 나중에 최소한의 담보 효과로 한 곳에서 처리됩니다.