2014-11-23 3 views
1

나는 함수를 가지고 있으며이 함수 안에는 3 가지 가능성의 또 다른 함수를 실행해야한다.매개 변수로 전달 된 함수를 사용할 수 있습니까?

간단한 방법은 해당 매개 변수에 따라 if-elif-exec 함수를 사용하여 매개 변수를 전달해야하지만 params가 funtion의 이름을 전달하고 사용하는 것이 가능하다는 점을 알고 싶습니다. 같은 : functionA 호출 방법에 따라

FunctionA(Param1, Param2, FunctionNameToUse) 
    ....Code.... 
    FunctionNameToUse(Value1, Value2) 
    ....Code.... 
endFunctionA 

, 그것은 ... 내가 잘 설명하면 내가 아는 해달라고,

감사 동료를 하나 개의 기능 또는 다른를 사용합니다!

답변

3

함수 자체는 파이썬에서 제일 객체입니다. 따라서 이름을 전달할 필요가 없습니다. 실제 함수 자체를 전달하면 직접 호출 할 수 있습니다.

def func1(a, b): 
    pass 

def func2(a, b): 
    pass 

def functionA(val1, val2, func): 
    func(val1, val2) 

# now call functionA passing in a function 
functionA("foo", "bar", func1) 
+0

정말 고맙습니다. – rul3s

0

파이썬에서 함수는 최상위 값입니다. 즉, 함수가 인수로 전달되거나 함수에서 반환 될 수 있음을 의미합니다.

그래서 취하고 싶은 접근 방식이 효과가 있습니다. 그러나 이름을 전달하지 않고 실제 함수를 전달합니다.

표준 라이브러리에서 mapfilter을 살펴보십시오.

-1

예, 가능합니다. 앞서 언급 한 것처럼 함수는 일류 객체입니다. 즉, 생각할 수있는 모든 작업을 수행 할 수 있습니다 (자세한 내용은 What are "first class" objects? 참조).

그러면 매개 변수로 함수를 전달할 때 이것이 실제로 어떻게 작동합니까? ComSci 클래스를 사용했다면 각 프로세스가 코드에 할당 된 메모리의 특정 영역을 가지고 있음을 알 수 있습니다. 모든 기능이 여기에 정의되어 있습니다. 함수를 호출 할 때마다 CPU는 프로그램 카운터 (현재 실행중인 코드를 가리키는 특수 포인터)를 함수 코드의 시작 부분으로 이동하고 거기에서부터 이동합니다. 따라서 함수가 메모리에로드 된 후에는 함수를 호출하는 데 필요한 모든 것이 해당 주소입니다. 파이썬에서 함수 A의 "이름"을 다른 함수 B에 인수로 전달할 때, 실제로 메모리에서 A를 나타내는 코드에 주소를 포함하는 참조 (C 용어로는 포인터)가 전달됩니다.

+0

누군가가 downvote를 설명하는 마음, 즉 내가 뭘 잘못 생각 했나요? – oxymor0n

관련 문제