0
点赞
收藏
分享

微信扫一扫

具名元组


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

用namedtuple 构造的类的实例所消耗的内存根元组是一样的,因为字段名都被存在对于的类里面..

用法

#具名元组
from collections import namedtuple

City = namedtuple('City','name country population coordinates')
# 存放在对应字段里的数据要以一串参数的形式传入到构造函数中

tokyo = City('Tokyo','JP',36.1999,(35.68872,139.6542)) # 生成一个city的实例对象
beijing = City('Beijing','BJ',100.66944,(35.6698963,115.115666))
print(tokyo,type(tokyo))
# 具名元组还有一些自己专有的属性 , _filed()类属性 , 类方法 _make(iterable) , 实例方法 _asdict()
print(City._fields)#_filed() 属性是一个包含这个类所有字段名称的元组
LatLong = namedtuple('LatLong','lat long') #新建的LatLong 类
delhi_data = ('Delhi NCR' ,'IN',21.995 ,LatLong(28.613889,77.20889))

delhi = City._make(delhi_data) #用_make()通过传入一个可迭代对象生成这个类的实例
#delhi = City('Delhi NCR' ,'IN',21.995 ,LatLong(28.613889,77.20889)) 和上面等效
print()
print(delhi._asdict()) # _asdict()把具名元组以collections.OrderedDict 的形式返回
for key , value in delhi._asdict().items():
print(key + ': ',value)

#输出
'''
City(name='Tokyo', country='JP', population=36.1999, coordinates=(35.68872, 139.6542)) <class '__main__.City'>
('name', 'country', 'population', 'coordinates')

OrderedDict([('name', 'Delhi NCR'), ('country', 'IN'), ('population', 21.995), ('coordinates', LatLong(lat=28.613889, long=77.20889))])
name: Delhi NCR
country: IN
population: 21.995
coordinates: LatLong(lat=28.613889, long=77.20889)
'''

City是用namedtuple 创建的一个具名元组,可以把它可做类 ,创建一个具名元组需要两个参数, 一个是类名,另一个是类的各个字段的名字.后者可以使由数个字符串组成的可迭代对象 , 或者是由空格分隔开的字段名组成的字符串.

以上面代码上的例子,tokyo 是创建的City类的实例对象 , 可以用 City(参数)构造,或者用 类方法  _make()构造 ,

beijing = City._make('Beijing','BJ',100.59556,(35.66998,555)) 这样利用元组就可以很方便的表示一个城市的大体状况


 


 


 

举报

相关推荐

0 条评论