以列表为参数或多个值作为参数的 Python 函数

我想编写一个python函数my_sumsum以如下方式扩展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方式吗?对我来说,代码看起来很奇怪。


米脂
浏览 286回答 2
2回答

UYOU

它是蟒蛇式的。我认为至少需要进行一项检查,并且 python 的理念是“请求宽恕而不是许可”(在此处解释),这基本上意味着对于标准控制流使用 try-except 块是可以的。如果导入已建立的库是 pythonic 并且您被允许并愿意做的事情,您也可以使用numpy.sum,如下所示:import numpy as npdef my_sum(*x):    return np.sum(x)根据这个定义,两者my_sum([1, 2, 3])  my_sum(1, 2, 3) 返回6。

慕村225694

我认为这不是例外的用例,例外是例外情况。如果将参数转换为列表并传递给加法器函数,请使用另一个函数。此外,输入的验证和格式化应该在代码的外部,而不是在最终的函数中。在最好的情况下,数据应该在进入这个函数之前进行验证,并且你应该只有sum处理熟数据的函数。这是一种方法:保持简单避免添加条件路径避免在内部代码中进行防御性编程从而避免未来的问题。我会有以下代码。def argsToList(*x):  return list(x)  print sum([1,2,3,4])print sum(argsToList(1,2,3,4))# both output 10
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python