使用两组括号调用Python函数

使用两组括号调用Python函数,python,function,currying,function-calls,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 但是,测试环境通过为不同的testlist和testbas

对于赋值,我必须创建一个函数,该函数应该遍历一个带有数字的列表,并使用这个基数的每个数字作为某个基数的幂。这些数字应该加起来。例如,以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

但是,测试环境通过为不同的testlist和testbase调用代码f(list1)(base)来测试此函数。当使用此调用方法时,我的代码无法使用此方法。那么我如何编辑我的代码,通过调用f(list1)(base)来编辑代码呢?

你可以用你的代码来编辑代码,但是你应该将它打包到另一个函数中并返回:

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)

您可以使用代码执行此操作,但应将其打包到另一个函数中并返回:

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)

是的,有一个叫做“咖喱”的概念,是由。这允许您创建一个新函数,其中一些arg或kwarg与值相关联

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'
导入工具
f2=functools.partial(f,基数=10)
f2(列表1=[1,2,3])#注意,您必须使用关键字arg调用f2。。。
1110#答案正确
f2([1,2,3])#…如果使用正常(位置)参数,则会出现错误
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:f()为关键字参数“base”获取了多个值

是的,有一个叫做“咖喱”的概念,由实现。这允许您创建一个新函数,其中一些arg或kwarg与值相关联

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'
导入工具
f2=functools.partial(f,基数=10)
f2(列表1=[1,2,3])#注意,您必须使用关键字arg调用f2。。。
1110#答案正确
f2([1,2,3])#…如果使用正常(位置)参数,则会出现错误
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:f()为关键字参数“base”获取了多个值

您为什么需要这样做?'f(list1,base)
有什么问题吗?(有一个“currying”函数的概念,因此可以得到g=f(list1);g(base)
,但我不明白你为什么需要这样做?你的
f
应该只取
list1
,然后返回一个取
base
的函数。因为这是一个我学习如何用python编码的赋值。赋值代码由计算机测试,它使用随机列表和随机基测试函数。它测试了乐趣通过使用f(list1)(base)调用函数来执行操作。我将此标记为“currying”,因为这是该概念的调用方式。为什么需要这样做?f(list1,base)
有什么问题吗?(有一个“currying”函数的概念,因此可以得到g=f(list1);g(base)
,但我不明白你为什么需要这样做?你的
f
应该只取
list1
,然后返回一个取
base
的函数。因为这是一个我学习如何用python编码的赋值。赋值代码由计算机测试,它使用随机列表和随机基测试函数。它测试了乐趣通过使用f(list1)(base)调用函数进行操作。我将此标记为“currying”,因为这是调用的概念。这是在不使用相同概念的情况下实现currying。值得一提的是,可以使用
sum()
和lambda表达式更简洁地编写此代码:
def(list1):返回lambda base:sum(列表1中的base**i代表i)
这是在不使用相同概念的情况下实现curry。值得一提的是,可以使用
sum()
和lambda表达式更简洁地编写:
def(列表1):返回lambda base:sum(列表1中的base**i代表i)
将一个具有多个参数的函数转换为一系列函数,每个函数都有一个参数。而
functools.partial()
可用于逐个设置参数,但它不能转换函数:当原始函数不返回函数时,它将永远不会返回返回函数的函数。这也不能回答问题。使用多个参数转换函数意味着将其转换为一系列函数,每个函数使用一个参数。虽然可以使用
functools.partial()
逐个设置参数,但它不能实现函数:当原始函数不返回函数时,它永远不会返回返回函数的函数。这也不能回答问题。