def lite(a,b,c):
#...
def big(func): # func = callable()
#...
#main
big(lite(1,2,3))
如何做到这一点?
以哪种方式将带参数的函数传递给另一个函数?
为什么不这样做:
big(lite, (1, 2, 3))
你可以这样做:
def big(func, args):
func(*args)
import functools
#main
big(functools.partial(lite, 1,2,3))
通常有两种解决类似问题的方法:
例如:
#!/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()函数返回值。
你应该这样做:
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))
big(lite, 1, 2, 3)
和def big(func, *args): func(*args)
。 - Anurag Uniyalbig
,并且lite
具有固定的签名,那就很好。但是通常一个或两个都是外部的。在这种情况下,Teddy 的方法(partial
)更加通用。 - Mark