Python 我可以使用通过参数传递的函数吗?

Python 我可以使用通过参数传递的函数吗?,python,function,parameters,Python,Function,Parameters,我有一个函数,在这个函数中,我应该执行另一个3个可能性的函数 最简单的方法应该是传递一个参数,根据该参数执行if-elif-to-exec函数,但我想知道,可以通过参数传递函数名并使用它,比如: FunctionA(Param1, Param2, FunctionNameToUse) ....Code.... FunctionNameToUse(Value1, Value2) ....Code.... endFunctionA 取决于函数的调用方式,它将使用一个函数或另

我有一个函数,在这个函数中,我应该执行另一个3个可能性的函数

最简单的方法应该是传递一个参数,根据该参数执行if-elif-to-exec函数,但我想知道,可以通过参数传递函数名并使用它,比如:

FunctionA(Param1, Param2, FunctionNameToUse)
    ....Code....
    FunctionNameToUse(Value1, Value2)
    ....Code....
endFunctionA
取决于函数的调用方式,它将使用一个函数或另一个函数,我不知道我是否解释得很好


谢谢朋友们

在python中,函数是一级值,这意味着它们可以作为参数传递,从函数返回,等等

因此,您希望采用的方法应该是可行的(不过,您不是在传递名称,而是在传递实际的函数)


看看标准库中的
map
filter
,它们就是这样做的。

函数本身就是Python中的一流对象。因此不需要传递名称:传递实际函数本身,然后您可以直接调用它

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)

是的,你可以。正如其他人提到的,函数是一流的对象,也就是说,你可以对它做任何你能想到的事情(有关更多信息,请参阅)


那么,当您将函数作为参数传入时,这是如何工作的呢?如果您参加过任何ComSci课程,您就会知道每个进程在内存中都有一个为其代码分配的特殊区域;这里定义了所有函数。无论何时调用函数,CPU都会将程序计数器(指向当前正在执行的任何代码的特殊指针)移动到该函数代码的开头,然后从那里开始。因此,在函数加载到内存中之后,只需调用它的地址。在Python中,当您将函数a的“name”作为参数传递给另一个函数B时,您所做的实际上是传递一个引用(在C术语中是指针),该引用包含表示内存中a的代码的地址

非常感谢你,伙计!有人介意解释一下我的否决票,即我错在哪里?