*参数接受什么类型的数据?该函数适用于直接输入,但如果输入元组/列表变量,则会出现错误(如下:"数字")


def add_unlimited(*args):
sum = 0
for n in args:
sum += n
print(sum)


numbers = [23, 45, 23, 56]  
add_unlimited(23, 45, 23, 56)

def add_unlimited(*args)接受任意数量的参数。在函数内部,参数以list的形式访问,命名为args

注意add_unlimited([23, 45, 23, 56])使用一个参数调用函数。这个参数恰好是一个列表,[23, 45, 23, 56]。在函数内部,这将导致args = [[23, 45, 23, 56]]。如果每个参数都不是整数,则函数内的其余代码将无法工作,这就是为什么会出现错误。

您可以使用解包操作符*将单个列表作为多个参数传递:
add_unlimited(*[23, 45, 23, 56])相当于add_unlimited(23, 45, 23, 56)

请注意,与Go等其他静态语言不同,*args没有任何类型限制。您甚至可以将整数列表的元组和普通字符串混合在一起。这相当于像*args: Any那样对其进行类型注释——表示每个参数可以是任何类型。

然而,在这种情况下,看起来你的函数依赖于每个参数是一个数字。因此,我将键入注释,如*args: Number,以提示调用者传入的每个参数应该是一个有效的数字。

用法如下:

from numbers import Number

def add_unlimited(*args: Number):
sum = 0
for n in args:
sum += n
print(sum)

numbers = [23, 45, 23, 56]
add_unlimited(*numbers)
sum=0
for n in args:
sum = 0 + [23, 45, 23, 56] 

你不能添加一个列表和零。

你可能想要像

这样的东西
for x in args:
for n in x:
sum += n

最新更新