Python函数作为函数参数?

Posted

技术标签:

【中文标题】Python函数作为函数参数?【英文标题】:Python function as a function argument? 【发布时间】:2011-09-11 11:46:42 【问题描述】:

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

说:

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

所以这基本上是两个问题:

    是否允许? 如果是,我如何在另一个函数中使用该函数?我需要使用 exec()、eval() 或类似的东西吗?永远不需要惹他们。

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

【问题讨论】:

相关:***.com/questions/47502068/… 【参考方案1】:

Decorators 在 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()

输出

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

【讨论】:

【参考方案2】:

函数内部的函数:我们也可以将函数用作参数..

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

def out_func(a):

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

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

结果将是.. 14

希望这会有所帮助。

【讨论】:

【参考方案3】:
def x(a):
    print(a)
    return a

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

y(x, 1)

我认为这是一个更合适的样本。 现在我想知道是否有一种方法可以对函数进行编码,以便在将参数提交给另一个函数时使用。我相信在 C++ 中有,但在 Python 中我不确定。

【讨论】:

【参考方案4】:

这是使用*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 必须按此顺序排列,并且必须是调用函数的函数的最后一个参数。

【讨论】:

更多关于 *args 和 **kwargs 的信息可以在这里找到pythontips.com/2013/08/04/args-and-kwargs-in-python-explained【参考方案5】:
def x(a):
    print(a)
    return a

def y(a):
    return a

y(x(1))

【讨论】:

请考虑为您的答案添加一些解释。 这里没有将函数作为参数传递,而是返回值。【参考方案6】:

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
>>>

【讨论】:

extraArgs 也可以是一个函数吗?如果是的话,你怎么称呼它? @sekai 是的,extraArgs 也可以是一个函数。 这是在哪里记录的?【参考方案7】:
    是的。通过在输入参数中包含函数调用,您可以一次调用两个(或更多)函数。

例如:

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

当你调用 myfunc 时,你会这样做:

myfunc(anotherfunc(inputarg1, inputarg2))

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

希望这会有所帮助!

【讨论】:

【参考方案8】:

当然,这就是为什么 python 在第一个参数是函数的情况下实现以下方法的原因:

map(function, iterable, ...) - 将函数应用于每个可迭代项 并返回结果列表。 filter(function, iterable) - 从这些元素构造一个列表 函数返回 true 的可迭代对象。 reduce(function, iterable[,initializer]) - 应用函数 两个参数累积到可迭代的项目,从左到 对,以便将可迭代减少为单个值。 lambdas

【讨论】:

【参考方案9】:
    是的,这是允许的。 您可以像使用其他任何功能一样使用该功能:anotherfunc(*extraArgs)

【讨论】:

【参考方案10】:

Python 中的函数是一流的对象。但是你的函数定义is a bit off。

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

【讨论】:

以上是关于Python函数作为函数参数?的主要内容,如果未能解决你的问题,请参考以下文章

python进阶一(函数式编程)2-1 python把函数作为参数

python把函数作为参数

python使用函数作为参数

Python函数式编程(把函数作为参数传入)

Python函数

Python传入函数作为参数,打印函数名和结果[重复]