1. 封装和解构
1.1 封装
说明: 等号(=)右边有多个数值仅通过逗号分割,就会封装到一个元组,称为封装packing。
# 示例: x = 1, y = 1,2 print(type(x), x) print(type(y), y) # 输出结果如下: <class 'tuple'> (1,) <class 'tuple'> (1, 2)
备注: 如果右边只有一个数值且没有用逗号,其实是一个整数类型,请留意。另外等号右边一定先运行,再赋值给左边。
1.2 解构
说明: 等号(=)右边容器类型的元素与左边通过逗号分割的变量要一 一对应,称为解构unpacking。
x,y = (1,2) # [1,2] {1,2} {'a':1,'b':2} print(x) print(y) # 输出结果如下: 1 2
备注: 右边的容器可以是元组、列表、字典、集合等,必须是可迭代对象。
错误示范:
x,y = (1,2,3) print(x) print(y) # 输出结果如下: ValueError: too many values to unpack (expected 2)
说明: 左、右两边个数一定要一致,不然会抛出'ValueError'错误。
剩余变量解构
说明: python3引入了剩余变量解构(rest),'尽可能'收集剩下的数据组成一个列表。
x, *rest = [1,2,3,4,5,6] print(type(x), x) print(type(rest), rest) # 剩余没有赋值的就是rest的了 # 输出结果如下: <class 'int'> 1 <class 'list'> [2, 3, 4, 5, 6]
*rest, y = [1,2,3,4,5,6] print(type(rest), rest) print(type(y), y) # 输出结果如下: <class 'list'> [1, 2, 3, 4, 5] <class 'int'> 6
错误示例:
- 不能单独使用说明: 等号左边只有一个标识符,无法解构。*rest = [1,2,3,4,5,6] print(rest) # 输出结果如下: #语法错误 SyntaxError: starred assignment target must be in a list or tuple
- 不能多次同时使用x, *rest1, *rest2, y = [1,2,3,4,5,6] print(rest1) print(rest2) # 输出结果如下: #语法错误,其中一个rest就把剩余元素拿走了,另外一个rest怎么拿? SyntaxError: two starred expressions in assignment
另外一种丢弃变量下划线:'_'
说明: '_'是合法的标识符,大多场景表示不关心该值。
x, *_, y = [1,2,3,4,5,6] print(x) print(_) print(y) # 输出结果如下: 1 [2, 3, 4, 5] 6
_, *rest, _ = [1,2,3,4,5,6] print(_) # '_'是上一次输出值 print(rest) # 输出结果如下: 6 [2, 3, 4, 5]
2. 集合Set
说明: 集合是'可变的、无序的、不重复'的元素集合。
成为集合元素是有条件的:'元素必须可hash、可迭代'
可哈希对象如下(不可变):
- 数值型:int(整数)、float(浮点)、complex(复数)
- 布尔型:True(是)、Fals