元组
- 定义:元组(tuple)是特殊的序列类型,元组可以理解成一个只读的列表,只能获取数据但不能对元组里面的数据进行修改。
- 创建元组表现形式:使用
和,
来表示,如:()
# 格式
(数据1,数据2,数据3……)
# 例子
('red', 'blue', 'green')
(2, 4, 6, '字符串', ['列表', 1], True, (1,2))
# 定义空元组
my_tuple1 = ()
my_tuple2 = tuple()
- 注意: 如果元组里面只有一个数据,那么这数据后面的逗号
不能省略,如:,
(数据1,)
- 优点:一旦被创建就不能修改,使得代码更安全
- 注意:如果说元组数据一定不能改变是错的,因为元组中如果有列表、字典等可变元素,这些元素是可以变化的。
tuple1 = (1, 3, 5, [2, 4, 6])
tuple1[3][0] = 777
-------------------------------
tuple1 = (1, 3, 5, [777, 4, 6])
访问方式和字符串、列表基本相同
- 元组只有查询操作
- 下标、切片、
方法(没有find)tuple.index('xxx')
- 一般用于表达固定数据项、函数多返回值等情况、最常见的使多个数据格式化输出的时候
print('%s,%s' % (x, y))
拆分(拆包)
- 注意:变量和value的数量必须一一对应
x, y, ... = (value1,value2, ...) # 元组拆包
x, y, ... = [value1, value2, ...] # 列表拆包
x, y, z, ... = '字符串...' # 字符串拆包
x, y, ... = {k1: v1, k2: v2, ...} # 字典拆包,直接拆获得的是key
x, y, ... = {k1: v1, k2: v2, ...}.values() # 这样获得的是value
拆包的使用场景
一、接收返回值
def show():
return 1, 2, 3 # 其实是元组(1,2,3),但Python的PEP8要求简写
# 对返回值进行了拆包,其实就是对元组进行了拆包
a, b, c = show()
print(a, b, c)
二、交换变量的值
# 交换变量值原始的方法,借助第三个变量
a = 1
b = 2
c = a
a = b
b = c
print(f'交换后a={a}, b={b}')
# 利用拆包交换变量的值
a = 1
b = 2
a, b = b, a
print(f'交换后a={a}, b={b}')
三、不定长参数、关键字参数传参
my_tuple = (1, 2)
my_dict = {"a": 1, "b": 2}
# 对元组进行拆包(*my_tuple),表示把元组里面的每一个元素按照位置参数的方式进行传参
# 对字典进行拆包(**my_dict),表示把字典里面的每一个键值对按照关键字方式进行传参
show_info(*my_tuple, **my_dict)
# 注意: 对元组和字典进行拆包(*my_tuple, **my_dict),不能单独使用,
# 只能结合带有不定长参数的函数使用
特点
- 元组中的元素可以是不同类型的
- 元组中的元素存在先后关系,可通过索引访问元组中的元素
列表与元组
- 元组是不可变的,列表是可变的;
- 元组通常由不同的数据组成,列表通常是由相同类型的数据组成(只是习惯);
- 元组表示的是结构,列表表示的是顺序;