mqslllduoduo

Python元组的�级版本 -- namedtuple(具�元组)

因为元组的局�性:�能为元组内部的数�进行命�,所以往往我们并�知�一个元组所�表达的�义,所以在这里引入了 collections.namedtuple 这个工厂函数,�构造一个带字段�的元组。具�元组的实例和普通元组消耗的内存一样多,因为字段�都被存在对应的类里�。这个类跟普通的对象实例比起�也��一些,因为 Python �会用 __dict__ �存放这些实例的属性。

namedtuple 对象的定义如以下格�:

collections.namedtuple(typename, field_names, verbose=False, rename=False) 

返回一个具�元组�类 typename,其中�数的�义如下:

  • typename:元组å��ç§°
  • field_names: 元组中元素的å��ç§°
  • rename: 如果元素å��称中å�«æœ‰ python 的关键字,则必须设置为 rename=True
  • verbose: 默认就好

下��看看声明一个具�元组�其实例化的方法:

import collections

# 两�方法�给 namedtuple 定义方法�
#User = collections.namedtuple('User', ['name', 'age', 'id'])
User = collections.namedtuple('User', 'name age id')
user = User('tester', '22', '464643123')

print(user)

collections.namedtuple('User', 'name age id') 创建一个具�元组,需�两个�数,一个是类�,�一个是类的�个字段�。�者�以是有多个字符串组�的�迭代对象,或者是有空格分隔开的字段�组�的字符串(比如本示例)。具�元组�以通过字段�或者�置�获�一个字段的信�。

输出结果:

User(name='tester', age='22', id='464643123')

具�元组的特有属性:

类属性 _fields:包�这个类所有字段�的元组 类方法 _make(iterable):接�一个�迭代对象�生产这个类的实例 实例方法 _asdict():把具�元组以 collections.OrdereDict 的形�返回,�以利用它�把元组里的信��好的展示出�
from collections import namedtuple

# 定义一个namedtuple类型User,并包�name,sex和age属性。
User = namedtuple('User', ['name', 'sex', 'age'])

# 创建一个User对象
user = User(name='Runoob', sex='male', age=12)

# 获�所有字段�
print( user._fields )

# 也�以通过一个list�创建一个User对象,这里注�需�使用"_make"方法
user = User._make(['Runoob', 'male', 12])

print( user )
# User(name='user1', sex='male', age=12)

# 获�用户的属性
print( user.name )
print( user.sex )
print( user.age )

# 修改对象属性,注��使用"_replace"方法
user = user._replace(age=22)
print( user )
# User(name='user1', sex='male', age=21)

# 将User对象转��字典,注��使用"_asdict"
print( user._asdict() )
# OrderedDict([('name', 'Runoob'), ('sex', 'male'), ('age', 22)])

以上实例输出结果为:

('name', 'sex', 'age')
User(name='Runoob', sex='male', age=12)
Runoob
male
12
User(name='Runoob', sex='male', age=22)
OrderedDict([('name', 'Runoob'), ('sex', 'male'), ('age', 22)])