Python函数的可变参数

3

我正在学习Python,并遇到可变参数。我不理解以下代码输出的内容:

_list = [11,2,3]
def print_list(*args):
    for value in args:
        a = value * 10
        print(a)
print_list(_list)

当我运行程序时,出现以下结果:
[11, 2, 3, 11, 2, 3, 11, 2, 3, 11, 2, 3, 11, 2, 3, 11, 2, 3, 11, 2, 3, 11, 2, 3, 11, 2, 3, 11, 2, 3]

据我理解,value 只包含 _list 数组中的一个元素,将它乘以 10 将会得到列表 [110, 20, 30]。为什么输出结果不同呢?

3
尝试执行 print(args),你会明白原因。在你的情况下,args([11,2,3],) 这样一个长度为1的列表元组。 - FHTMitchell
2个回答

6
因为您函数的参数是*args(带有*),所以您的函数实际上接收到传入参数的元组,因此args变成了([11,2,3],)(包含您传入的列表的元组)。
您的函数遍历该元组中的值,赋值value=[11,2,3]。当您将一个列表乘以10时,您会得到一个长度增加10倍的列表。

明白了,谢谢。因为我来自C++背景,所以我误将*args视为类似指针的功能。现在我会学习Python中的元组。 - Tesla

0

可能你正在寻找的是扩展列表print_list(*_list),它将输入列表的每个元素作为函数参数传递,因此输出为110 20 30

如果您将列表作为numpy.array(_list) * 10,那么乘法也会生效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接