当我想知道元组解包如何工作时,我在几个线程上发现了这个答案作为切片的替代方法:
>>>>def unpack(first,*rest):
return first, rest
其工作原理如下:
>>>>first,rest=unpack(*(1,2,3))
>>>>first
1
>>>>rest
(2,3)
我不明白 * 是如何工作的。参数“first”不应该提供给我的函数 unpack 吗?我认为 * 意味着该参数是可选的。
谢谢你的帮助
当我想知道元组解包如何工作时,我在几个线程上发现了这个答案作为切片的替代方法:
>>>>def unpack(first,*rest):
return first, rest
其工作原理如下:
>>>>first,rest=unpack(*(1,2,3))
>>>>first
1
>>>>rest
(2,3)
我不明白 * 是如何工作的。参数“first”不应该提供给我的函数 unpack 吗?我认为 * 意味着该参数是可选的。
谢谢你的帮助
*
在函数定义中并不意味着可选;它的意思是“将调用者提供的任何其他(非关键字)参数打包到一个元组中并将元组放在这里”。类似地,*
在函数调用上意味着“解包这一系列事物,并将所有元素作为参数单独提供给函数”。
unpack(*(1,2,3))
解包(1,2,3)
并调用
unpack(1,2,3)
1
被分配给first
,剩下的参数2
和3
被打包成一个元组并分配给rest
。
在你的情况下,unpack(*(1,2,3))
只是unpack(1, 2, 3)
.
unpack 的实现采用第一个参数和一个 args 故事,然后将其作为元组返回。
如果您将参数作为变量传递,星形语法很有用:
a = (1, 2, 3)
first, rest = unpack(*a)