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

Python: passing a function with parameters as parameter

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
6
7
8
9
def lite(a,b,c):
    #...

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


#main
big(lite(1,2,3))

如何做到这一点?以什么方式将带有参数的函数传递给另一个函数?


为什么不这样做:

1
big(lite, (1, 2, 3))

然后你可以做:

1
2
def big(func, args):
    func(*args)


1
2
3
4
import functools

#main
big(functools.partial(lite, 1,2,3))


类似的问题通常有两种解决方法:

  • 使用lambda…但随后传递的函数将需要一个参数,因此需要更改big()。
  • 使用命名函数调用带有参数的原始函数。请注意,此类函数可以在其他函数内声明,参数可以是变量。
  • 参见示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #!/usr/bin/python

    def lite(a,b,c):
        return"%r,%r,%r" % (a,b,c)

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

    def big2(func): # func = callable with one argument
        print func("anything")


    def main():
        param1 = 1
        param2 = 2
        param3 = 3

        big2(lambda x: lite(param1, param2, param3))

        def lite_with_params():
            return lite(param1,param2,param3)

        big(lite_with_params)

    main()

    不是这样,而是传递给大的lite()函数的返回值。

    你应该这样做:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    def lite(a, b, c):
        return a + b + c

    def big(func, arg):
        print func(arg[0], arg[1], arg[2])



    big(lite, (1, 2, 3))