对于一项任务,我必须创建一个应该通过数字列表的函数,并使用该基数的每个数字作为某个基数的幂。这些数字应该加起来。因此,例如,具有基数10的列表[1,2,3]应该导致1110(10 ^ 1 + 10 ^ 2 + 10 ^ 3)。我可以很容易地为此创建一个代码:
def f(base,list1):
answer=0
for i in list1:
answer+=base**i
return answer
然而,测试环境通过调用代码f(list1)(base)来测试此函数,用于不同的测试列表和测试库。使用这种调用方法时,这对我的代码不起作用。那么如何通过调用f(list1)(base)?
来编辑我的代码答案 0 :(得分:1)
您可以使用您的代码执行此操作,但是您应该将其打包到另一个函数中并返回:
def f(list1):
def f2(base):
answer=0
for i in list1:
answer+=base**i
return answer
return f2
res = f([1,2,3])(10)
print (res)
答案 1 :(得分:-1)
是的,有一个名为' currying'的概念,由functools.partial实施。这允许您创建一个新函数,其中一些args或kwargs与值相关联。
import functools
f2 = functools.partial(f, base=10)
f2(list1=[1,2,3]) # Note you have to call f2 with a keyword arg...
1110 # Right answer
f2([1,2,3]) #...it errors if you use the normal (positional) arg
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: f() got multiple values for keyword argument 'base'