我想编写一个Python函数my_sum
,该函数以以下方式扩展python内置的sum
:
my_sum
,则其行为类似于内置的sum
。my_sum
,它将返回值的总和。所需的输出:
my_sum([1, 2, 3]) # shall return 6 (similiar to built-in sum)
my_sum(1, 2, 3) # shall return 6 as well, (sum throws TypeError)
以下是有效的方法。
def my_sum(*x):
try:
return sum(x) # sums multiple values
except TypeError:
return sum(*x) # sums sequence of values
这是实现所需行为的pythonic方法吗?对我来说,代码看起来很奇怪。
答案 0 :(得分:2)
这是pythonic。我认为至少需要进行一次检查,并且python的哲学是“要求非宽恕”(解释为here),这基本上意味着对于标准控制流,可以使用try-except块。
如果导入已建立的库是pythonic的,并且允许并且愿意这样做,则也可以使用numpy.sum,如下所示:
import numpy as np
def my_sum(*x):
return np.sum(x)
有了这个定义,两者
my_sum([1, 2, 3])
my_sum(1, 2, 3)
返回6
。
答案 1 :(得分:0)
我认为这不是例外的用例,例外是例外的情况。如果将参数转换为列表并传递给加法器函数,请使用另一个函数。
此外,输入的验证和格式应位于代码的外部,而不是最终函数中。在最佳情况下,应先验证数据,然后再使用此功能,sum
函数才能处理已煮熟的数据。
这是一种方法:
我将输入以下代码。
def argsToList(*x):
return list(x)
print sum([1,2,3,4])
print sum(argsToList(1,2,3,4))
# both output 10