【Python】元组拆包 | 嵌套拆包 | 具名元组

元组拆包

平行赋值

最常见的元组拆包
把一个可迭代对象里的元素,一并赋值到对应的变量组成的元组中

lax_coordinates = (33.9425, -118.408056)
latitude, longithub = lax_coordinates
print(latitude)
print(longithub)

在这里插入图片描述

交换变量

不使用中间变量优雅的交换两个变量的值也属于元组拆包应用

a, b = b, a

函数值的接收

一个函数用元组的形式返回多个值,例如os.path.split()

import os 
_, filename = os.path.split('/home/FluentPyhon/idrsa.pub')
print(filename)

在这里插入图片描述

用*来处理剩下的元素

函数使用*args来获取不确定数量的参数

a, b, *rest = range(5)
print(a, b, rest)

在这里插入图片描述

在平行赋值中,* 前缀只能用在一个变量名前面,但这个变量可以出现在赋值表达式的任意位置

a, *body, c, d = range(5)
print(a, body, c, d)
*head, b, c, d = range(5)
print(head, b, c, d)

在这里插入图片描述

嵌套元组拆包

接受表达式的元组可以是嵌套式的,例如(a, b, (c, d))

# 用嵌套元组来获取经度
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, -64.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('{:15} | {:^9.4f} | {:^9.4f}'.format(name, latitude, longitude))

在这里插入图片描述

具名元组

collections.namedtuple是一个工厂函数,它用于构建一个带字段名的元组和一个有名字的类

用namedtuple构造的类的实例所消耗的内存跟元组是一样的

定义和使用具名元组

具名元组记录城市信息

from collections import namedtuple
City = namedtuple('City', 'name country population coordinates')
tokyo = City('Tokyo', 'JP', 36.933, (35.689722, 139.691667))
print(tokyo)
print(tokyo.population)
print(tokyo.coordinates)
print(tokyo[1])

在这里插入图片描述

具名元组的属性和方法

具名元组有一些自己专有的属性:

_fields类属性、类方法_make(iterable)和实例方法_asdict()

# 接上文
print(City._fields)
LatLong = namedtuple('LatLong', 'lat long')
delhi_data = ('Delhi NCR', 'IN', 21.935, LatLong(28.613889, 77.208889))
print(delhi_data)
delhi = City._make(delhi_data)
print(delhi._asdict())

for key, value in delhi._asdict().items():
    print(key + ':', value)

_fileds属性是一个包含这个类所有字段名称的元组
用_make()通过接受一个可迭代的对象来生成这个类的一个实例,作用与City(*delhi_data)一样
_asdict()把具名元组以collections.OrderedDict的形式返回。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值