Python:传递一个带参数的函数作为参数

Mik*_*ike 23 python function

def lite(a,b,c):
    #...

def big(func): # func = callable()
    #...


#main
big(lite(1,2,3))
Run Code Online (Sandbox Code Playgroud)

这该怎么做?
以什么方式将带参数的函数传递给另一个函数?

Ski*_*ick 38

为什么不这样做:

big(lite, (1, 2, 3))
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

def big(func, args):
    func(*args)
Run Code Online (Sandbox Code Playgroud)

  • 你甚至可以做`big(lite,1,2,3)`和`def big(func,*args):func(*args)` (5认同)

Ted*_*ddy 7

import functools

#main
big(functools.partial(lite, 1,2,3))
Run Code Online (Sandbox Code Playgroud)


Jac*_*zny 5

类似的问题通常通过两种方式解决:

\n\n
    \n
  1. 使用 lambda\xe2\x80\xa6 但传递的函数将需要一个参数,因此需要更改 big()
  2. \n
  3. 使用命名函数调用带有参数的原始函数。请注意,此类函数可以在其他函数内声明,并且参数可以是变量。
  4. \n
\n\n

参见示例:

\n\n
#!/usr/bin/python\n\ndef lite(a,b,c):\n    return "%r,%r,%r" % (a,b,c)\n\ndef big(func): # func = callable()\n    print func()\n\ndef big2(func): # func = callable with one argument\n    print func("anything")\n\n\ndef main():\n    param1 = 1\n    param2 = 2\n    param3 = 3\n\n    big2(lambda x: lite(param1, param2, param3))\n\n    def lite_with_params():\n        return lite(param1,param2,param3)\n\n    big(lite_with_params)\n\nmain()\n
Run Code Online (Sandbox Code Playgroud)\n