Python:以参数传递参数作为参数
问题描述:
def lite(a,b,c):
#...
def big(func): # func = callable()
#...
#main
big(lite(1,2,3))
如何做到这一点?
用什么方式将参数传递给另一个函数?Python:以参数传递参数作为参数
答
为什么不这样做:
big(lite, (1, 2, 3))
?
然后,你可以这样做:
def big(func, args):
func(*args)
答
import functools
#main
big(functools.partial(lite, 1,2,3))
答
不是这样,你传递给大精简版()函数的返回值。
你应该这样做:
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))
+0
这是什么元组解包 - 查看我的答案。 – Skilldrick 2010-02-27 13:18:34
答
类似的问题通常有两种方式解决:
- 和λ......但随后的传递函数会期待一个参数,这么大()的需求被改变
- 用命名函数调用具有参数的原始函数。请注意,这样的函数可以在其他函数中声明,参数可以是变量。
见例如:
#!/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()
你甚至可以做'大(精简版,1,2,3)'和'高清大(FUNC,*参数):FUNC(*参数)' – 2010-02-27 14:35:50
如果你可以(并且想要)改变'big','lite'有一个固定的签名,那很好。但通常一个或两个都是外部的。在这种情况下,泰迪的方法(“部分”)更普遍。 – Mark 2016-02-06 17:58:54