在python中解包是什么意思?

ttisahbt  于 2023-03-11  发布在  Python
关注(0)|答案(5)|浏览(168)

示例:

var1, var2, var3 = argv

解压缩argv[]列表
在谷歌和Python 2.7文档上查找,但找不到我的问题的相关答案。

5t7ly7z5

5t7ly7z51#

这被称为序列解包,在Python教程5.3节的末尾提到过:
语句t = 12345, 54321, 'hello!'是元组打包的示例:值1234554321'hello!'被打包在一个元组中。

>>> x, y, z = t

这被称为序列解包(sequence unpacking),它对右边的任何序列都有效,序列解包要求等号左边的变量和序列中的元素一样多,注意多重赋值实际上是元组打包和序列解包的结合。

oyt4ldly

oyt4ldly2#

使用以下工具打开 Package :

var1, var2, var3 = argv

相当于执行以下操作:

var1 = argv[0]
var2 = argv[1]
var3 = argv[2]

不同之处在于,如果argv包含的元素多于(或少于)您给定的变量数,则解包将失败(在本例中,我假设argv只包含3个元素)。

ijxebb2r

ijxebb2r3#

与答案相反

您不需要在左侧使用正确数量的参数,如果指定一个参数来“获取其余参数”,则可以使用更少的参数-称为"Extended Iterable Unpacking"

k, l, *i, x = range(20)

print(k) 
print(l) 
print(i)  # *i catches all hat are not otherwise matched
print(x)

输出:

0                                                              # k
1                                                              # l
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]   # *i
19                                                             # x
fzwojiic

fzwojiic4#

在Python中,如果你有一个列表、元组或其他可迭代对象,你可以将其中的独立项赋给左边的变量。
例如:

>>> mylist = [1, 2, 3]
>>> one, two, three = mylist
>>> one
1
>>> two
2
>>> three
3

赋值语句左边的变量现在包含了右边的可迭代对象中的元素,这需要你在左边有正确数量的变量来把右边的可迭代对象中的元素放入。
这在循环中非常方便:

>>> data = [("filename1.txt", 1024),
>>>         ("filename2.txt", 2048),
>>>         ("filename3.txt", 512)]
>>> for name, size in data:
>>>    print(name, "is", size, "bytes")
filename1.txt is 1024 bytes
filename2.txt is 2048 bytes
filename3.txt is 512 bytes

这里发生的事情是,对于data变量中的每一项,在每次运行for循环时,单独的项(string和int)被解包到变量namesize中。
在您的特定情况下,argv包含从命令行运行脚本时传递的参数,您可以将参数解压缩为变量,这是您在示例中所做的。

cidc1ykv

cidc1ykv5#

解包会将右边参数的不同值赋给左边不同的参数,所以如果你有a=[0,1,2],你可以这样解包:因此,a0将等于a[0]a1将等于a[1],等等。
希望能有所帮助!

相关问题