如何在没有必需参数的情况下调用函数?

时间:2019-06-04 19:01:05

标签: python function instantiation

我想创建一个函数列表,以设置先前定义的函数的默认值,以便以后可以仅使用一个参数来调用它们。问题是第一个参数是必需的,所以我得到一个错误。最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

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))

它允许您将参数预先输入到列表中并进行迭代。