使用两组括号调用Python函数

时间:2016-10-31 19:42:51

标签: python function currying function-calls

对于一项任务,我必须创建一个应该通过数字列表的函数,并使用该基数的每个数字作为某个基数的幂。这些数字应该加起来。因此,例如,具有基数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)?

来编辑我的代码

2 个答案:

答案 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'