我想创建一个函数列表,以设置先前定义的函数的默认值,以便以后可以仅使用一个参数来调用它们。问题是第一个参数是必需的,所以我得到一个错误。最Python的方式是什么?
def plus(num, a1):
return num + a1
def div(num, a1):
return num / a1;
acts = [plus(a1 = 3), div(a1 = 3), div(a1 = 2)]
num = 9
for act in acts:
num = act(num)
我想要的行为是让num为9-> 12-> 4-> 2
答案 0 :(得分:4)
使用funtools.partial
,您需要翻转参数,因为部分按顺序应用它们:
from functools import partial
def plus(a1, num):
return num + a1
f = partial(plus, 3)
例如:
>>> f = partial(plus, 3)
>>> f(10)
13
或使用默认值:
def div(num, a1=1):
return num / a1
fdiv = partial(div, a1=3)
例如:
>>> acts = [partial(plus, 3), partial(div,a1 = 3), partial(div, a1 = 2)]
>>> num = 9
>>> for act in acts:
... num = act(num)
...
>>> num
2.0
答案 1 :(得分:1)
对于您的情况,您可以执行以下操作:
def plus(num, a1):
return num + a1
def div(num, a1):
return num / a1;
acts = [(plus, 3), (div, 3), (div, 2)]
num = 9
for func, arg in acts:
print(func(num, arg))
它允许您将参数预先输入到列表中并进行迭代。