Python 函数"sum"语法如下: sum() -> 0 sum(1)(2)(3) -> 6

  • 本文关键字:sum 语法 Python 函数 python
  • 更新时间 :
  • 英文 :


我是Python的新手,我需要用类似的语法编写函数sum

print(sum())
print(sum(1)(2)(3))
print(sum(1)(2)(3)(-4)(-5))

输出为:

0
6
-3

我试图像这样写装饰器:

def sum(a=0):
res = a
def helper(b=0):
nonlocal res
res += b
return res
return helper

但它只对固定数量的 () 有帮助。所以这段代码仅适用于:sum(1)(2)->3,不适用于sum()-><function sum.<locals>.helper at 0x7fca6de44160>sum(1)()(3)->TypeError: 'int' object is not callable我认为应该有一个带有递归的装饰器,但我不知道如何实现它

这种语法选择对我来说看起来很奇怪 -sum(foo)的结果应该是数字还是函数?内置sum只接受一个可迭代对象并返回一个数字,这感觉不那么令人惊讶。

但是,假设您确定确实要创建看起来像整数,像整数一样行走,像整数一样游泳但也可以调用的东西,该语言确实允许您创建它:

class sum(int):
def __call__(self, x=0):
return sum(self + x)

输出如您所指定的那样:

print(sum())
print(sum(1)(2)(3))
print(sum(1)(2)(3)(-4)(-5))
0
6
-3

最后,我找到了解决此任务的方法(仅使用函数):

def sum(x=None):
value = 0
def helper(y=None):
nonlocal value
if y is None:
return value
value += y
return helper
return helper(x)

最新更新