我想编写一个python函数my_sum,sum以如下方式扩展python的内置函数:如果一个序列被传递给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方式吗?对我来说,代码看起来很奇怪。
2 回答

UYOU
TA贡献1878条经验 获得超4个赞
它是蟒蛇式的。我认为至少需要进行一项检查,并且 python 的理念是“请求宽恕而不是许可”(在此处解释),这基本上意味着对于标准控制流使用 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。

慕村225694
TA贡献1880条经验 获得超4个赞
我认为这不是例外的用例,例外是例外情况。如果将参数转换为列表并传递给加法器函数,请使用另一个函数。
此外,输入的验证和格式化应该在代码的外部,而不是在最终的函数中。在最好的情况下,数据应该在进入这个函数之前进行验证,并且你应该只有sum
处理熟数据的函数。
这是一种方法:
保持简单
避免添加条件路径
避免在内部代码中进行防御性编程
从而避免未来的问题。
我会有以下代码。
def argsToList(*x):
return list(x)
print sum([1,2,3,4])
print sum(argsToList(1,2,3,4))
# both output 10
添加回答
举报
0/150
提交
取消