add(5)(10)(20)
如何提供任意数量的括号来添加数字?
答案 0 :(得分:3)
你可以像这样创建一个类:
class add(object):
def __init__(self, value):
self.value= value
def __call__(self, value):
self.value+= value
return self
def __repr__(self):
return str(self.value)
print add(5)(10)(20)
# output: 35
答案 1 :(得分:2)
这是不可能的,或者至少它应该,如果您使用的语言是值得的。你要求函数返回两种不同的类型,这会引发一场灾难。
什么?退后一步,问问自己是什么样的设计。您需要某种方式来通知函数您已完成输入,现在您需要计算值。
考虑一下,该功能可能看起来像这样
def add (sum):
print(sum)
return lambda x: add(sum + x)
add(1)(3)(4)(5)(10)(20)
# 1
# 4
# 8
# 13
# 23
# 43
# => None
但除非你以某种方式更改api,否则无法让函数知道返回最终值。
当用户输入0
或其他内容时,您可以更改api以返回计算值。好主意对吗?非常聪明。
def add (x):
def loop(sum, x):
if x == 0:
return sum
else:
return lambda x: loop(sum + x, x)
return loop(0, x)
print(add(1)(3)(4)(5)(10)(20)(0))
# 42
嘿,看起来,它适用于@Rawling的聪明代码失败的地方。所有这些都没有在课堂上添加一些技巧
print(add(5)(10)(20)(0) + add(5)(10)(20)(0))
# 70
但是,这仍然是垃圾代码。没有精心设计的功能应该像这样。
或者如果您的内容是疯了,请创建一个类似@Rawing的答案建议。
答案 2 :(得分:-1)
你能做的是:
class add(object):
def __init__(self, val):
self.val= val
def __call__(self, val=None):
if not val:
return self.val
self.val += val
return self
add(5)(10)()
>>> 15