2011-08-10 3 views
1

내 함수 인수의 목록을 제공합니다 :파이썬 기능 긴 매개 변수 목록

def myFunc(*args): 
    retVal=[] 
    for arg in args: 
     retVal.append(arg+1) 
    return "test",retVal 

문제는 당신이 매개 변수의 긴 목록에있을 때 매우 성가신 될 것입니다 전체 매개 변수 목록을 두 번 작성해야하기 때문에 함수에 전달하십시오. 전체 매개 변수가있는 매개 변수가 10 개 이상이면 정말 (실제로) 무거워집니다.

test,alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota=myFunc(alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota) 

그래서 나는 이런 식으로 뭔가에 대해 생각 :

w=alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota 
test,w=myFunc(w) 

을하지만 내가해야 할 창틀 :

alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota=w 

은 포기하고 목록을 다시 얻을 수있는 짧은 방법이 매개 변수. 매개 변수를 직접 수정하기위한 함수에 대한 포인터를 제공 하시겠습니까?

w=alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota 
test,w=myFunc(w) 

# And directly get my parameters modified to be able to print them : 
print alpha,[...],iota 

답변

3

는 단순히 함수는 딕셔너리를 반환합니다

이것은 내가 무엇을 찾고있다. 그런 다음 myFunc(**yourdict)을 사용하여 dict 항목을 인수로 사용하고 return yourdict과 동일한 dict (아마도 수정 된 값 포함)을 얻었거나 원본 dict 만 수정하고 전혀 반환하지 않습니다.

+0

팁 주셔서 감사합니다. 다음은 당신의 생각을 따르는 것입니다 : 알파, 베타, 감마, 델타, 엡실론, 제타, η, 쎄타, 아이타 = 1,2,3,4,5,6,7,8,9 dict = { '알파': 알파, '베타': 베타, '감마': 감마, '델타': 델타, '엡실론': 엡실론, '제타': 제타, 'η': η, '쎄타': 쎄타 'IOTA'IOTA} 딕셔너리 = MYFUNC (** 딕셔너리)이 내 새로운 기능 ' 된다 : 'DEF MYFUNC (** 딕셔너리) ARG위한 RETVAL = [] 은 dict에서 : dict [arg] = dict [arg] +1 return dict' 감사합니다. – Mibou

+0

1. 사전의 이름으로'dict'을 사용하지 마십시오.'dict'라는 실제 클래스보다 우선합니다. 2. 'd = dict (alpha = alpha, beta = beta, ...)'와 같은 키워드를 사용하여 dict을 정의 할 수 있습니다. 따옴표와 콜론의 Shift 키를 많이 사용하지 않아도됩니다. – kindall

5

두 가지 옵션 :

  1. 여러 기능에 논리를 분할하여 인수의 수를 줄여보십시오.

  2. 1.)를 사용할 수없는 경우 모든 인수를 캡슐화하여 단일 인수를 사전으로 사용할 수 있습니다. 이는 유연하고 (매개 변수를 제거하거나 매개 변수를 추가하더라도 함수의 시그니처는 동일하게 유지됨) 대체로 읽을 수있는 솔루션 (사전의 의미있는 키)이 될 것입니다.

+1

+1 기능을 해체합니다. 긴 매개 변수 목록은 [코드 냄새] (http://www.codinghorror.com/blog/2006/05/code-smells.html)입니다. – senderle