流畅的 Python(19):序列构成的数组 2.3.3

阅读数:8 2019 年 11 月 20 日 16:56

流畅的Python(19):序列构成的数组 2.3.3

内容简介
本书致力于帮助 Python 开发人员挖掘这门语言及相关程序库的优秀特性,避免重复劳动,同时写出简洁、流畅、易读、易维护,并且具有地道 Python 风格的代码。本书尤其深入探讨了 Python 语言的高级用法,涵盖数据结构、Python 风格的对象、并行与并发,以及元编程等不同的方面。

(嵌套元组拆包)

接受表达式的元组可以是嵌套式的,例如 (a, b, (c, d))。只要这个接受元组的嵌套结构符合表达式本身的嵌套结构,Python 就可以作出正确的对应。示例 2-8 就是对嵌套元组拆包的应用。

示例 2-8 用嵌套元组来获取经度

复制代码
metro_areas = [
('Tokyo','JP',36.933,(35.689722,139.691667)), # ➊
('Delhi NCR', 'IN', 21.935, (28.613889, 77.208889)),
('Mexico City', 'MX', 20.142, (19.433333, -99.133333)),
('New York-Newark', 'US', 20.104, (40.808611, -74.020386)),
('Sao Paulo', 'BR', 19.649, (-23.547778, -46.635833)),
]
print('{:15} | {:^9} | {:^9}'.format('', 'lat.', 'long.'))
fmt = '{:15} | {:9.4f} | {:9.4f}'
for name, cc, pop, (latitude, longitude) in metro_areas: # ➋
if longitude <= 0: # ➌
print(fmt.format(name, latitude, longitude))

❶ 每个元组内有 4 个元素,其中最后一个元素是一对坐标。

❷ 我们把输入元组的最后一个元素拆包到由变量构成的元组里,这样就获取了坐标。

if longitude <= 0: 这个条件判断把输出限制在西半球的城市。

示例 2-8 的输出是这样的:

复制代码
| lat. | long.
Mexico City | 19.4333 | -99.1333
New York-Newark | 40.8086 | -74.0204
Sao Paul | -23.5478 | -46.6358

在 Python 3 之前,元组可以作为形参放在函数声明中,例如 def fn(a, (b, c), d):。然而 Python 3 不再支持这种格式,具体原因见于“ PEP 3113—Removal of Tuple Parameter Unpacking ”。需要弄清楚的是,这个改变对函数调用者并没有影响,它改变的是某些函数的声明方式。

元组已经设计得很好用了,但作为记录来用的话,还是少了一个功能:我们时常会需要给记录中的字段命名。namedtuple 函数的出现帮我们解决了这个问题。

流畅的Python(19):序列构成的数组 2.3.3

图灵地址 https://www.ituring.com.cn/book/1564

评论

发布