2015-01-29 2 views
-2

파이썬에서 함수를 정의하려고합니다. 그것은 다음과 같아야합니다 :100 개의 인수로 함수를 정의하는 방법

def myfunction(Peter_1, Amy_1, Peter_2, Amy_2, Peter_3, Amy_3,....Peter_50,Amy_50): 
    Peter_1 = 100 
    Amy_1 = 20 
    Peter_2 = 90 
    Amy_2 = 4 
    ... 
    ... 

저는 파이썬으로 작성하여 optimazation을하고 있습니다. 이 소프트웨어는 내가 myfunction을 정의 후, 나는 Parameter의 첫 번째 인수는 문자열이어야

parameter1 = Parameter("Peter_1", (90,100),1) 
parameter2 = Parameter("Amy_1", (15,25),1) 
... 
... 
parameter99 = Parameter("Peter_50", (70,100),1) 
parameter100 = Parameter("Amy_50", (15,25),1) 

Parameter

소프트웨어 정의 함수 작성해야하고, 그것이 내가 정의 정확히 이름이어야한다, 그런 식입니다 myfunction. 그런 다음 소프트웨어는 최적화가 필요한 첫 번째 매개 변수가 Peter_1이라는 것을 알고 있습니다. 100 개의 매개 변수를 모두 입력하지 않으려면 아무도 도와 줄 수 없습니까?

+0

* "어떤 이유로"* - 무슨 이유입니까?! 인수를 목록이나 튜플로 절대적으로 써야합니다. 'def myfunction (peters, amys)'또는'def myfunction (* people)'과 같은 것들이다. 그리고 함수 내에서 즉시 재 할당되는 매개 변수 정의가 거의 없습니다. – jonrsharpe

+2

목록으로 작성하지 않으시겠습니까? 그것은 당신에게 같은 결과를 줄 것입니다 ... 어떻게 든 당신이 우리에게 그것을하지 않을 것이라고 확신시킬 수 없다면. 인수가 호출 컨텍스트의 목록에 없기 때문에 인수가 * args 또는 그 반대로 함수 정의 안에 팩할 수 있습니다. 다른 설득력있는 주장은 무엇입니까? – Eithos

+0

예, 100 개의 인수를 입력하는 것은 정말 어리석은 일입니다 :) – duDE

답변

1

이것은 나쁜 코드 냄새입니다. 인수를 객체에 넣어야합니다. 예를 들어 사전.

이런 식으로 뭔가 :

def myfunction(people): 
    for person_name in people.iterkeys(): 
     people[person_name] = 100 

my_people = {} 
my_people['Peter'] = 0 
my_people['Simon'] = 0 

myfunction(my_people) 
print my_people 

하지만 내 진짜 문제는 함수의 값을 초기화하는 것입니다. 왜 미리?

my_people = {} 
my_people['Peter'] = 100 
my_people['Simon'] = 90 

그런 식으로는 기능이 필요 없습니다.

-1

파이썬 * args 구문을 사용할 수도 있습니다. 이 같은 예를 들어 뭔가 : 당신이 당신이 당신의 질문에 표시된 방법을 작성해야하는 경우 잘

def foo(*args): 
    for i in args: 
     print(i) 

foo(1,2) 
foo(1,2,3,4,5,6,7,8) 
#output: 
1 
2 
#second run: 
1 
2 
3 
4 
5 
6 
7 
8 
-1

, RVDK의 대답은 작동하지만, 당신은 exec() 기능을 사용하는 것이 좋습니다. 그렇게하면 스크립트 내부에이 함수를 문자열로 쓰는 작은 코드를 작성할 수 있습니다. 그런 다음 exec()을 사용하면 실제로 결과 문자열을 코드의 활성 부분으로 사용할 수 있습니다.

가능성이있는 경우 목록이나 튜플을 사용하는 것이 좋습니다.

관련 문제