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

2024-04-27 01:00:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我想编写一个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

这就是达到预期行为的方式吗?对我来说,代码看起来很奇怪。你知道吗


Tags: to函数returnmy方式序列内置values
2条回答

我认为它不是异常的用例,异常是针对异常的。如果将参数转换为列表并传递给加法器函数,请使用另一个函数。你知道吗

此外,输入的验证和格式化应该在代码的外部,而不是在final函数中。在最好的情况下,应该在使用此函数之前验证数据,并且您应该只使用sum函数来处理煮熟的数据。你知道吗

这是一种方法:

  • 保持简单
  • 避免添加条件路径
  • 避免在内部代码中使用防御性编程
  • 从而避免未来的问题。你知道吗

我会有以下代码。你知道吗

def argsToList(*x):
  return list(x)  

print sum([1,2,3,4])
print sum(argsToList(1,2,3,4))
# both output 10

它是脓性的。我认为至少需要进行一次检查,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。你知道吗

相关问题 更多 >