变量解包

简介: 变量解包

变量解包
变量解包(unpacking)是Python里的一种特殊赋值操作,允许我们把一个可迭代对象(比如列表)的所有成员,一次性赋值给多个变量:

>>> usernames = ['bruce_liu', 'raymond']
>>> author, reader = usernames
>>> author
Out[4]: 'bruce_liu'

注意:左侧变量的个数必须和待展开的列表长度相等,否则会报错。

假如在赋值语句左侧添加小括号(…),甚至可以一次展开多层嵌套数据:

>>> attrs = [1, ['bruce_liu', 100]]
>>> user_id, (username, score) = attrs
>>> user_id
Out[7]: 1
>>> username
Out[8]: 'bruce_liu'

除了上面的普通解包外,Python还支持更灵活的动态解包语法。只要用星号表达式(*variables)作为变量名, 它便会贪婪地捕获多个值对象,并将捕获到的内容作为列表赋值给variables。

比如,下面data列表里的数据分为三段:头用户,尾为分数,中间的都是水果名称。通过把*fruits设置为中间的解包变量,我们就能一次性解包所有变量—fruits会捕获data去头去尾后的所有成员:

>>> data = ['bruce_liu', 'apple', 'orange', 'banane', 100]
>>> username, *fruits, score = data
>>> username
Out[10]: 'bruce_liu'
>>> fruits
Out[11]: ['apple', 'orange', 'banane']
>>> score
Out[12]: 100

和常规的切片赋值语句比起来,动态解包语法要直观许多:

# 动态解包
>>> username, *fruits, score = data
# 切片赋值
>>> username, fruits, score = data[0], data[1], data[-1]
# 两种变量赋值方式完全等价

上面的变量解包操作也可以在任何循环语句里使用:

>>> for username, score in [('bruce_liu', 100), ('raymond', 60)]:
...        print(username)
... 
bruce_liu
raymond
相关文章
|
存储 Shell 编译器
makefile 变量赋值方式
makefile 变量赋值方式
99 1
|
6月前
|
Python
Python中解包使用星号(*)进行灵活解包
【6月更文挑战第21天】
157 2
|
22天前
将一个变量的字符串复制到另外一个变量中
【10月更文挑战第32天】将一个变量的字符串复制到另外一个变量中。
22 0
|
3月前
|
Python
Python变量用法——变量解包
Python变量用法——变量解包
|
6月前
|
安全 Python 容器
|
5月前
|
Python
Python中字典解包解包到变量
【7月更文挑战第4天】
45 1
|
6月前
|
Python
Python中解包到单独的变量对于字典
【6月更文挑战第20天】
38 11
|
5月前
|
Python
python解包字典到函数参数
【7月更文挑战第5天】
31 2
|
6月前
|
Python
|
6月前
|
Python
Python中解包到单独的变量
【6月更文挑战第19天】
24 4