作为函数参数的 Python 函数?

假设我有这样的代码:

def myfunc(anotherfunc, extraArgs):
# somehow call `anotherfunc` here, passing it the `extraArgs`
pass

我想传递另一个现有函数作为 anotherfunc参数,以及一个参数列表或元组作为 extraArgs,并让 myfunc使用这些参数调用传入函数。

这可能吗? 我如何做到这一点-我需要 exec/eval或类似?

244412 次浏览

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
  1. 是的,这是允许的。
  2. 您可以像使用其他函数一样使用这个函数: anotherfunc(*extraArgs)

Python 中的函数是一流的对象,但是函数定义 有点不对劲

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

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

  • Map (function,iterable,...)-将函数应用到每个 iterable 条目 并返回结果列表。
  • Filter (function,iterable)-根据这些元素构造一个列表 函数返回 true 的可迭代的。
  • Reduce (function,iterable [ ,initializer ])-应用 两个参数累积到可迭代的项,从左到右 对,以便将迭代器减少到单个值。
  • Lambdas
  1. 是的。通过在输入参数/s 中包含函数调用,您可以同时调用两个(或更多)函数。

例如:

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

当你调用 myfunc 的时候,你这样做:

myfunc(anotherfunc(inputarg1, inputarg2))

这将打印另一个 func 的返回值。

希望这个能帮上忙!

下面是另一种使用 *args(也是可选的)和 **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

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

def x(a):
print(a)
return a


def y(a):
return a


y(x(1))
def x(a):
print(a)
return a


def y(func_to_run, a):
return func_to_run(a)


y(x, 1)

我觉得这个样本更合适。 现在我想知道的是,是否有一种方法可以在向另一个函数提交参数时使用这个函数。我相信 C + + 中有,但是在 Python 中我不确定。

函数内部函数: 我们也可以使用函数作为参数。

换句话说,我们可以说一个函数的输出也是一个对象的引用,看看下面内部函数的输出是如何引用外部函数的,如下所示。.

def out_func(a):


def in_func(b):
print(a + b + b + 3)
return in_func


obj = out_func(1)
print(obj(5))

结果就是. 。 14

希望这个能帮上忙。

修饰符 在 Python 中非常强大,因为它允许程序员将函数作为参数传递,还可以在另一个函数中定义函数。

def decorator(func):
def insideFunction():
print("This is inside function before execution")
func()
return insideFunction


def func():
print("I am argument function")


func_obj = decorator(func)
func_obj()


输出

  • 这是在执行之前的函数内部
  • 我是参数函数