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

How to call a function without the required arguments?

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

使用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

对于你的情况,你可以这样做:

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

它允许您 pre-enter 参数到列表并迭代。