天天看点

Python基础学习笔记——元组元组

元组

  • 定义:元组(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])
           

访问方式和字符串、列表基本相同

  • 元组只有查询操作
  • 下标、切片、

    tuple.index('xxx')

    方法(没有find)
  • 一般用于表达固定数据项、函数多返回值等情况、最常见的使多个数据格式化输出的时候

    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),不能单独使用,
# 只能结合带有不定长参数的函数使用
           

特点

  • 元组中的元素可以是不同类型的
  • 元组中的元素存在先后关系,可通过索引访问元组中的元素

列表与元组

  • 元组是不可变的,列表是可变的;
  • 元组通常由不同的数据组成,列表通常是由相同类型的数据组成(只是习惯);
  • 元组表示的是结构,列表表示的是顺序;