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式
- 是的,这是允许的。
- 你可以使用这个函数:
anotherfunc(*extraArgs)
- 是。 通过将函数调用包含在input参数/ s中,可以一次调用两个(或更多)函数。
例如:
def anotherfunc(inputarg1, inputarg2): pass def myfunc(func = anotherfunc): print func
当你打电话给myfunc时,你这样做:
myfunc(anotherfunc(inputarg1, inputarg2))
这将打印anotherfunc的返回值。
希望这可以帮助!