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函数作为函数参数?的主要内容,如果未能解决你的问题,请参考以下文章