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