Python函数作为函数参数?

时间:2011-06-09 07:47:28

标签: python function arguments

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

说:

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

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

  1. 是否允许?
  2. 如果是,如何在其他功能中使用该功能?我需要使用exec(),eval()或类似的东西吗?永远不需要弄乱他们。
  3. BTW,extraArgs是anotherfunc参数的列表/元组。

11 个答案:

答案 0 :(得分:114)

  

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 :(得分:30)

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

答案 2 :(得分:16)

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

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

答案 3 :(得分:4)

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

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

答案 4 :(得分:2)

  1. 是的,这是允许的。
  2. 您可以像使用其他任何功能一样使用此功能:anotherfunc(*extraArgs)

答案 5 :(得分:2)

  1. 是。通过在输入参数中包含函数调用,您可以一次调用两个(或更多)函数。
  2. 例如:

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

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

    myfunc(anotherfunc(inputarg1, inputarg2))
    

    这将打印anotherfunc的返回值。

    希望这有帮助!

答案 6 :(得分:1)

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

换句话说,我们可以说函数的输出也是对象的引用,请参见下文,内部函数的输出如何引用外部函数,如下所示。

def out_func(a):

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

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

结果将是.. 14

希望这会有所帮助。

答案 7 :(得分: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()

输出

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

答案 8 :(得分:0)

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

def y(a):
    return a

y(x(1))

答案 9 :(得分:0)

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

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

y(x, 1)

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

答案 10 :(得分:-5)

def rotatedimention(l,m=[]):
    p=input("please enter a number to rotate the dimention:")
    for i in l:
        if i==l[int(p)]:
            break
        else:
            m.append(i)

    for j in m:
        l.remove(j)
    return l+m
rotatedimention([121,21,41412,3412124,223424,2324114])