我不知道tuple解包是如何工作的(python-2.x)

I don't get how tuple unpacking works (Python-2.x)

本问题已经有最佳答案,请猛点这里访问。

在我想知道tuple解包是如何工作的时候,我在几个线程上找到了这个答案作为切片的替代方法:

1
2
>>>>def unpack(first,*rest):
    return first, rest

其工作原理如下:

1
2
3
4
5
>>>>first,rest=unpack(*(1,2,3))
>>>>first
1
>>>>rest
(2,3)

我不明白*是怎么工作的。参数"first"不应该给我的函数unpack?我认为*意味着论点是可选的。

谢谢你的帮助


函数定义中的*并不意味着可选;它意味着"将调用方提供的任何附加(非关键字)参数打包到一个元组中,并将该元组放在此处"。同样,函数调用上的*意味着"解包这个序列,并将所有元素单独作为函数的参数提供。"

1
unpack(*(1,2,3))

解包(1,2,3)并调用

1
unpack(1,2,3)

1分配给first,其余的参数23打包成一个元组,分配给rest


在你的例子中,unpack(*(1,2,3))只是unpack(1, 2, 3)而已。

unpack的实现接受第一个参数和一个args故事,然后将其作为元组返回。

如果将参数作为变量传递,星型语法很有用:

1
2
a = (1, 2, 3)
first, rest = unpack(*a)