- 普通解包
>>> usernames = ['piglei', 'raymond']
# 注意:左侧变量的个数必须和待展开的列表长度相等,否则会报错
>>> author, reader = usernames
>>> author
'piglei'
- 多层级解包
>>> attrs = [1, ['piglei', 100]]
>>> user_id, (username, score) = attrs
>>> user_id
1
>>> username
'piglei'
- 动态解包
# 1. 动态解包
>>> username, *fruits, score = data
# 2. 切片赋值
>>> username, fruits, score = data[0], data[1:-1], data[-1]
# 两种变量赋值方式完全等价
和常规的切片赋值语句比起来,动态解包语法要直观许多
- 忽略解包
下划线_是比较特殊的一个。它常作为一个无意义的占位符出现在赋值语句中。_这个名字本身没什么特别之处,这算是大家约定俗成的一种用法。
#忽略展开时的第二个变量
author, _ = usernames
# 忽略第一个和最后一个变量之间的所有变量
username, *_, score = data
在Python交互式命令行(直接执行python命令进入的交互环境)里,_变量还有一层特殊含义——默认保存我们输入的上个表达式的返回值
'foo'.upper()
#'FOO'
print(_)
# FOO