*args 接受什么类型的数据?该函数使用直接输入,但如果输入 tuples/lists 个变量会出错(下图:"numbers")

what type of data do *args accept? The function works with direct input, but errors if tuples/lists variables are entered (below: "numbers")

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)

请注意 *args 没有任何类型限制,这与 Go 等其他静态语言不同。您甚至可以将整数列表的元组和纯字符串混合在一起。这相当于像 *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)

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)

sum=0
for n in args:
    sum = 0 + [23, 45, 23, 56] 

您不能添加列表和零。

你可能想要这样的东西

for x in args:
    for n in x:
        sum += n