解压序列赋值给多个变量
现在有一个包含 N 个元素的元组或者是序列,怎样将它里面的值解压后同时赋值给 N 个变量?
任何的序列 (或者是可迭代对象) 可以通过一个简单的赋值语句解压并赋值给多个变量。唯一的前提就是变量的数量必须跟序列元素的数量是一样的。
代码示例:
1 >>> p = (12, 16) 2 >>> x, y = p 3 >>> x 4 12 5 >>> y 6 16 7 >>> data = ['ABCD', 66, 90.0, (2018, 4, 14)] 8 >>> name, shares, price, date = data 9 >>> name 10 'ABCD' 11 >>> date 12 (2018, 4, 14) 13 >>> name, shares, price, (year, mon, day) = data 14 >>> name 15 'ABCD' 16 >>> year 17 2018 18 >>> mon 19 4 20 >>> day 21 14
如果变量个数和序列元素的个数不匹配,会产生一个异常。
代码示例:
1 >>> p = (12, 16) 2 >>> x, y, z = p 3 Traceback (most recent call last): 4 File "<stdin>", line 1, in <module> 5 ValueError: need more than 2 values to unpack
实际上,这种解压赋值可以用在任何可迭代对象上面,而不仅仅是列表或者元组。
包括字符串,文件对象,迭代器和生成器。
代码示例:
1 >>> s = 'hello' 2 >>> a, b, c, d, e = s 3 >>> a 4 'h' 5 >>> b 6 'e' 7 >>> c 8 'l'
当只需解压一部分,丢弃其他的值时,由于这种情况 下Python 中并没有提
供特殊的语法。可以使用任意变量名去占位,到时候丢掉这些变量就行了。
代码示例:
1 >>> data = ['ABCD', 66, 90.0, (2018, 4, 14)] 2 >>> _, shares, price, _ = data 3 >>> shares 4 66 5 >>> price 6 90.0
个人疑问:下划线本身也可以作为变量,所以需保证选用的那些占位变量名在其他地方没被使用到。
如下:
1 >>> data = ['ABCD', 66, 90.0, (2018, 4, 14)] 2 >>> _, shares, price, _ = data 3 >>> _ 4 (2018, 4, 14) 5 >>> _, shares, price, __ = data 6 >>> _ 7 'ABCD' 8 >>> __ 9 (2018, 4, 14) 10 >>>
《Python Cookbook》

浙公网安备 33010602011771号