python函数作为函数参数?

python函数可以作为另一个函数的参数吗? 说:

def myfunc(anotherfunc, extraArgs): # run anotherfunc and also pass the values from extraArgs to it pass 

所以这基本上是两个问题:1)是否允许? 2)如果是,如何使用其他函数里面的函数? 我需要使用exec(),eval()或类似的东西? 从来没有需要惹他们。

顺便说一句,extraArgs是anotherfunc参数的列表/元组。

python函数可以作为另一个函数的参数吗?

是。

 def myfunc(anotherfunc, extraArgs): anotherfunc(*extraArgs) 

更具体的…与各种论点…

 >>> def x(a,b): ... print "param 1 %s param 2 %s"%(a,b) ... >>> def y(z,t): ... z(*t) ... >>> y(x,("hello","manuel")) param 1 hello param 2 manuel >>> 

所有上面的例子都会导致TypeErrors,除非你调用其他函数的函数使用了* args(也可以select)** kwargs:

 def a(x, y): print x, y def b(other, function, *args, **kwargs): function(*args, **kwargs) print other b('world', a, 'hello', 'dude') 

产量

 hello dude world 

请注意,函数* args ** kwargs必须按顺序排列,并且必须是调用该函数的函数的最后一个参数。

Python中的函数是一stream的对象。 但是你的函数定义有点偏离 。

 def myfunc(anotherfunc, extraArgs, extraKwArgs): return anotherfunc(*extraArgs, **extraKwArgs) 

当然,这就是为什么python实现了第一个参数是一个函数的下列方法:

  • map(function,iterable,…) – 将函数应用于每个迭代项并返回结果列表。
  • filter(function,iterable) – 从那些函数返回true的iterable元素构造一个列表。
  • reduce(function,iterable [,initializer]) – 将两个参数的函数累加到可迭代项,从左到右,从而将迭代次数减less为单个值。
  • lambdaexpression式
  1. 是的,这是允许的。
  2. 你可以使用这个函数: anotherfunc(*extraArgs)
  1. 是。 通过将函数调用包含在input参数/ s中,可以一次调用两个(或更多)函数。

例如:

 def anotherfunc(inputarg1, inputarg2): pass def myfunc(func = anotherfunc): print func 

当你打电话给myfunc时,你这样做:

 myfunc(anotherfunc(inputarg1, inputarg2)) 

这将打印anotherfunc的返回值。

希望这可以帮助!