Fork me on GitHub

Python元组拆包实例讲解

一般刚开始学习Python语法的时候,我们都会学到“tuple是一种常用的Python数据结构”,但往往也是点到为止,要等到日后工作遇到问题是才会再去深入了解。其实,在日常使用Python开发自动化脚本时,活用tuple(元组),将极大提高开发效率。今天我们就来介绍一些实用的tuple拆包技巧。(毕竟时代在进步,Python2也快要成为时泪了,所以默认文章中的Python都是指python3)


python_tuple

元组赋值给多个变量

定量接收

1
2
3
4
5
6
7
8
9
In [1]: location = (132.1, 55.6)

In [2]: x, y = location

In [3]: x
Out[3]: 132.1

In [4]: y
Out[4]: 55.6

这是最基础最普通的tuple拆包,但也是实用频率最高的python技巧之一。当然,这里不止可以用来拆坐标。也有其它的使用场景。此外,Python函数return多个对象,默认就是以tuple形式返回。

需要注意的是,不仅是元组,在python中任何序列或可迭代对象(如:列表、元组、字符串、文件对象、迭代器和生成器等),皆可通过类似这样的简单赋值语句拆包给多个变量,唯一的要求就是变量必须跟序列元素的数量一致。

我们来看看下面的信息拆分实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
In [6]: info = ["Alice", 20, 168, 55, (1999,10,22)]

In [7]: info
Out[7]: ['Alice', 20, 168, 55, (1999, 10, 22)]

In [8]: name, age, height, weight, birthday = info

In [9]: age
Out[9]: 20

In [10]: birthday
Out[10]: (1999, 10, 22)

In [11]: name, age, height, weight, (year, month, day) = info

In [12]: height
Out[12]: 168

In [13]: year
Out[13]: 1999

In [14]: month
Out[14]: 10

In [15]: day
Out[15]: 22

在以元组形式拆分数据的代码中,这类用法频率很高。当然,需要注意的是:如果接收参数的变量个数和序列元素的个数不一致,会抛出ValueError的异常。

那么我们可以只拆分出我们需要的其中一部分信息吗?当然可以,这里就要提到占位符,我们可以使用任意变量名去占位,拆分后不管这部分变量即可。

举个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
In [16]: info = ["Alice", 20, 168, 55, (1999,10,22)]

In [17]: info
Out[17]: ['Alice', 20, 168, 55, (1999, 10, 22)]

In [19]: _,age, height,_,_ = info

In [20]: age
Out[20]: 20

In [21]: height
Out[21]: 168

In [23]: _
Out[23]: (1999, 10, 22)

这里使用了“_”占位,因为“_”接收了多个值,所以最后打印变量"_"时,显示的是它最后一次拆分得到的(1999, 10, 22)。

不定量接收

不过这样依然不够灵活,因为一个可迭代对象的元素个数超过变量个数时,依然会抛出ValueError。但我们会仅此而止吗?当然不会,接下来就是Python的星号表达式上场了。

1
2
3
4
5
6
7
In [27]: *head, current = (1,3,5,7,9)

In [28]: head
Out[28]: [1, 3, 5, 7]

In [29]: current
Out[29]: 9

你看,这样拆分,不管解压的数字有多少个,我们都能顺利取到该元组的最后一个元素。另外需要注意,这种拆解法拆出的head变量永远都是list列表类型,所以任何使用head变量的代码不用再去检查head是否是list类型了。特别对于有特定规则的元组进行拆解时,星号表达式的便捷性毋庸置疑。

当然,相较实际项目代码,上面的知识点仅是the basic of the basic,熟练的开发人员还有很多利用拆包特性的技巧,这个就留待后面来说了。

python tuple unpackage example

-------------  Fin    Thanks for reading!  -------------

本文标题:Python元组拆包实例讲解

文章作者:TesterCC

发布时间:2019年08月17日 - 20:08

最后更新:2019年08月17日 - 22:08

原始链接:http://blog.fullstackpentest.com/python-tuple-unpackage-example.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。