关注微信公众号“酸痛鱼”,获得更多最新最全的文章。

建议您在PC浏览器中阅读本文,以获得更好的阅读体验。

建议您抄写并运行本文中的例子的所有代码,并尝试对代码按照自己的理解进行适当的修改;根据运行结果,相信您会有不一样的收获。

0

初始化一个元组

当我们需要创建一个元组时,只需要将组成元组的元素用逗号分隔列举;当然也可以用括号将这些元素括起来,但括号是可选的。在会产生歧义的地方,括号则是必须提供的。如代码所示:

t1 = 1, 2, 3

print(t1) #输出:(1, 2, 3)

t2 = (1, 2, 3) #与t1相同

def add(a, b):

return a + b

# 形参 a = (1, 2, 3)

# 形参 b = (4, 5, 6)

# 这里初始化元组时,括号就时必须提供的

t3 = add((1, 2, 3), (4, 5, 6))

print(t3) #输出:(1, 2, 3, 4, 5 ,6)

当然,还有其它方式创建元组,但这与我们的拆包主题无关,所以在这里就不深入探讨。

1

值交换

大部分Python学习者应该很熟悉,如下的值交换操作:

a, b = b, a

# 相当于

tmp = a

a = b

b = tmp

实际上,值交换操作是发生了两件事件。第一步是用b和a初始化了一个元组,第二步是将元组拆包到a和b,如代码所示:

t = b, a # 初始化一个元组

a, b = t # 元组拆包

所以所谓的值交换操作,其实就是一个元组初始化和元组解包的过程。利用这个特性,我们可以对多个变量在同一行代码中进行初始化,以减少代码的行数:

a, b, c, d = 1, 2, 3, 4

2

元组拆包

元组拆包,是一个赋值表达式,效果是,将=(赋值操作符)右边的元组的元素拆开,赋值给=左边的多个变量。这里有一个要求,那就是=左边的变量个数必须与元素的长度一致。

# 创建元组t1

t1 = 1, 2

# 将t1拆包到a和b

a, b = t1

# 创建元组t2

t2 = 3, 4, t1

# t3 和 t1 是同一个对象,即元组(1, 2)

c, d, t3 = t2

当然,我们也可以在拆包t2的同时,将t1嵌套拆包:

# 注意(e,f)的括号不可省略,(e, f)被看成一个元素

# 左边的元素个数必须与t2长度一致

c, d, (e, f) = t2

不失一般性的,如果有多层元组嵌套,只要保证赋值操作符=左边两边的层级一致即可。嵌套拆包的一个常见的应用,是在for序列中,直接将多维元组中的子元组的元素直接拆开,以简化代码。以二维元组为例:

t = ((1, 2, 3), (4, 5, 6), (7, 8, 9))

for a, b, c in t:

print(‘a={}, b={}, c={}’.format(a, b, c))

输出结果如下:

a=1, b=2, c=3

a=4, b=5, c=6

a=7, b=8, c=9

在实际开发过程中,我们可能并不能确切地知道元组的长度。如果我们知道元组t至少有3个元素,并需要将t的前3个元素分别并赋值给a,b,c三个变量,可以有如下两种做法:

a, b, c = t[0], t[1], t[2]

#或者

a, b, c = t[:3]

这两种做法各有各的问题,第一种代码比较繁琐,第二种的代码则需要进行一次切片操作。事实上,更明智的做法是引入*rest语法,如代码所示:

# dummy的结果是一个元组

a, b, c, *dummy = t

它会将t的前三个元素存赋值给a,b,c,剩下的元素全部放入元组dummy中。如果dummy并没有什么用,很多Python开发者会用下划线(_)来代替,以使代码显得更加直观:

a, b, c, *_ = t

3

可迭代对象拆包

事实上,所有的可迭代对象都是支持拆包操作的,其实规则跟元组的是一样的。所以我们将直接给出代码和注释,不另作讲解。

li = [1, 3, 5]

# v1=1, v2=3, v3=5

v1, v2, v3 = li

d = {‘a’: 1, ‘b’: 2, ‘c’:3}

# k1 = ‘a’, k2 = ‘b’, k3 = ‘c’

k1, k2, k3 = d

s = “what”

# a=’w’, b=’h’

a,b, *_ = s

r = range(3)

# a=0, b=1, c=2

a, b, c = r

# 如果代码用到 生成器表达式

# i0~i5, c0~c5的值分别是什么呢?

# 我将会在以后的文章中深入介绍 生成器表达式

gen_exp = ((i, c) for i in range(2) for c in "abc")

(i0, c0), (i1, c1), (i2, c2), (i3, c3), (i4, c4), (i5, c5) = gen_exp微信扫码关注哦,大哥哥小姐姐们

python中元组拆包_Python3基础:元组拆包相关推荐

  1. python中筛选奇数_Python3基础 filter+lambda 筛选出1-20之间的奇数

    Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda : 4.5.11 typesetting : Markdown ...

  2. python中如何调用或修改元组中的元素_python 元组的使用方法

    元组--tuple 列表非常适合用于存储在程序运行期间可能变化的数据集. 列表是可以修改的,但元组是不可修改的 Python将不能修改的值称为不可变的,而不可变的列表被称为元组 1. 元组的创建和删除 ...

  3. Python中数组,列表,元组的区别、定义、功能

    准确的来说,在python中是没有数组类型的,python中取而代之的是列表和元组.列表比元组好用,因为元组一旦定义就没法修改.而列表不仅可以和数组一样按索引访问,还有一堆的功能. 列表: (1)添加 ...

  4. python二维列表转字典_在Python中字符串、列表、元组、字典之间的相互转换

    一.字符串(str) 字符串转换为列表 使用list()方法 str_1 = "1235" str_2 = 'zhangsan' str_3 = '''lisi''' tuple_ ...

  5. Python中的list列表 tuple元组 set集合 dictionary字典

    list 访问列表 连接列表 for 循环遍历列表 while循环遍历 列表比较 添加列表元素 append末尾添加 insert() extend()方法 删除列表 del 更改列表值 查列表(in ...

  6. python基础语法手册_说一说python中的几个基础语法

    学一门语言,基础语法一定要扎实.就如盖房子一样,地基打得好,任凭风吹雨打,学习python也一样,学习很多东西都会花大量的时间来学习基础语法,对于毫无编程经验的新手而言,这样的无疑是很友好的,那么我们 ...

  7. python中符号输入_Python基础(输入、运算符)

    输入 1. python2版本中 1.1 使用 raw_input()函数, 看如下示例: password = raw_input("请输入密码:") print ('您刚刚输入 ...

  8. python中function函数_Python基础---函数Function

    函数Function 定义:带名字的代码块,用于完成具体的工作 最基本的一种代码抽象的方式,借助函数,可以不用关心底层的具体计算过程,直接在更高层次上思考问题 在Python中,内置了多种多样的函数, ...

  9. python中ndarray对象_numpy基础——ndarray对象

    numpy 是使用python进行数据分析不可或缺的第三方库,非常多的科学计算工具都是基于 numpy 进行开发的. ndarray对象是用于存放同类型元素的多维数组,是numpy中的基本对象之一,另 ...

最新文章

  1. 零基础linux安装hadoop步骤,hadoop的Linux下简单安装步骤
  2. linux 做双机热备
  3. 安卓开发要学多久_华为发布鸿蒙2.0,和安卓相似度达80%「西瓜视频」
  4. 汇编-简单的条件转移指令应用-附例子:判断坐标所在象限
  5. 软件设计原则(一)开闭原则(Open-Closed Principle, OCP)
  6. 数据库工作笔记008---mysql开启远程访问权限_ 1042 Can't get hostname for your address_Access denied for user 'root'@'
  7. c++ error函数_回调函数地狱
  8. 论文笔记_S2D.37_2015-TPAMI_使用深度卷积神经场从单目图像学习深度
  9. Oracle 11g R1/R2 真正应用集群(RAC)基础
  10. 无线局域网打印服务器,无线局域网环境下怎么连接网络打印机
  11. 在Vista中用鼠标激活Flip 3D
  12. 证券公司信息化——8
  13. 关于Numpy数组中属性shape的理解
  14. 又是一年冬至,最喜欢吃冬至茧了
  15. 爬虫 使用python+requests模块爬取12306网站的车次信息
  16. matlab研究,基于MATLAB的实时数据采集与分析研究
  17. C++ 坑人小程序(全集)
  18. 怎么判断膝关节错位_膝关节基础(三):髌骨脱位查体和诊断
  19. 【详解---彻底卸载电脑上面Adobe软件】
  20. 将本地的word文档转为markdown(带图片)发布到CSDN

热门文章

  1. OpenGL-聚光灯-spot
  2. 节点网络计划图计算机,工程网络计划(网络图)
  3. python有哪些细节描写_细节描写的句子有哪些
  4. 一语中的!抽象工厂和一般工厂的缺点
  5. 从IDEA代码调试器的threads选项卡的一个细节谈如何学习编程
  6. webRTC(十一):webrtc 实时共享桌面
  7. QPST驱动安装失败的原因以及解决方法
  8. 【学浪下载教程】02学浪下载之Fiddler学浪插件配置
  9. 电子商务垂直化与纵深化发展的创新之路
  10. 压力传感器与压力变送器的区别