Python 我可以使用通过参数传递的函数吗?
我有一个函数,在这个函数中,我应该执行另一个3个可能性的函数 最简单的方法应该是传递一个参数,根据该参数执行if-elif-to-exec函数,但我想知道,可以通过参数传递函数名并使用它,比如:Python 我可以使用通过参数传递的函数吗?,python,function,parameters,Python,Function,Parameters,我有一个函数,在这个函数中,我应该执行另一个3个可能性的函数 最简单的方法应该是传递一个参数,根据该参数执行if-elif-to-exec函数,但我想知道,可以通过参数传递函数名并使用它,比如: FunctionA(Param1, Param2, FunctionNameToUse) ....Code.... FunctionNameToUse(Value1, Value2) ....Code.... endFunctionA 取决于函数的调用方式,它将使用一个函数或另
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的代码的地址 非常感谢你,伙计!有人介意解释一下我的否决票,即我错在哪里?