-4

当我想知道元组解包如何工作时,我在几个线程上发现了这个答案作为切片的替代方法:

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

其工作原理如下:

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

我不明白 * 是如何工作的。参数“first”不应该提供给我的函数 unpack 吗?我认为 * 意味着该参数是可选的。

谢谢你的帮助

4

2 回答 2

4

*在函数定义中并不意味着可选;它的意思是“将调用者提供的任何其他(非关键字)参数打包到一个元组中并将元组放在这里”。类似地,*在函数调用上意味着“解包这一系列事物,并将所有元素作为参数单独提供给函数”。

unpack(*(1,2,3))

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

unpack(1,2,3)

1被分配给first,剩下的参数23被打包成一个元组并分配给rest

于 2013-07-25T07:45:22.847 回答
1

在你的情况下,unpack(*(1,2,3))只是unpack(1, 2, 3).

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

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

a = (1, 2, 3)
first, rest = unpack(*a)
于 2013-07-25T07:43:24.170 回答