python中关于命名的例子_Python 学习 第12篇:命名元组

Python的元组不能为元组内部的数据进行命名,而 collections.namedtuple 可以来构造一个含有字段名称的元组类,命名元组可以通过逗号+字段名来获取元素值:

collections.namedtuple(typename, field_names)

返回一个命名元组类 typename,其中参数的意义如下:

typename:类名称

field_names: 元组中元素的名称

一,定义命名元组类

命名元组是一个类,有两种方式来定义命名元组:

from collections importnamedtuple

User= namedtuple('User', ['name', 'age', 'id'])

User= namedtuple('User', 'name age id')

实例化命名元组,获得类的一个实例:

user = User('tester', '22', '464643123')

二,命名元组的属性和方法

1,命名元组类的属性和方法

类属性 _fields:包含这个类所有字段名的元组

类方法 _make(iterable):接受一个可迭代对象来生产这个类的实例

#通过类方法 _make() 和一个list创建一个User对象

user = User._make(['Runoob', 'male', 12])

User._fields

2,命名元组实例的方法

实例方法 _asdict():把具名元组以 collections.OrdereDict 的形式返回,可以利用它来把元组里的信息友好的展示出来

实例方法_replace():用于修改实例的属性

# 获取实例的属性:

print( user.name,user.sex,user.age)#使用 _replace() 修改对象属性

user = user._replace(age=22)#User(name='user1', sex='male', age=22)

#使用 _asdict()函数把 User对象转换成字典

print( user._asdict() )#OrderedDict([('name', 'Runoob'), ('sex', 'male'), ('age', 22)])

三,把字典或列表转换为命名元组

1,把字典转换为命名元组

可以把Python的字典转换为命名元组:

>>> dt={'name':'b', 'age':2, 'id':135}>>> ut=User(**dt)## User(name='b', age=2, id=135)

2,把列表转换为命名元组

使用map函数,调用命名元组类的_make函数,把列表转换为命名元组的列表

User = namedtuple('User', 'name age id')

list_users=map(User._make,[('u1',23,1001),('u2',21,1002),('u3',25,1003),])

3,把命名元组转换为列表

也可以把命名元组转换为list,列表中只有值,而没有字段名称:

>>>list(ut)

['b', '2', 135]

四,访问命名元组

通过逗号运算符和属性名来访问元组字段的值,例如,ut是命名元组的对象,name是对象的属性,可以通过以下方式访问元组的name属性:

ut.name

五,命名元组的用途

命名元组在存储csv或者sqlite3返回数据的时候特别有用

EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade')importcsvfor emp in map(EmployeeRecord._make, csv.reader(open("employees.csv", "rb"))):print(emp.name, emp.title)importsqlite3

conn= sqlite3.connect('/companydata')

cursor=conn.cursor()

cursor.execute('SELECT name, age, title, department, paygrade FROM employees')for emp inmap(EmployeeRecord._make, cursor.fetchall()):print(emp.name, emp.title)

参考文档:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值