Python namedtuple(命名元组)使用实例

本文介绍了Python中的namedtuple,它允许创建具有命名字段的不可变序列。通过collections.namedtuple定义了一个名为Person的类型,包含name、age和gender字段。可以像访问对象属性一样使用这些字段。注意,namedtuple不支持关键字冲突和重复字段名,但可以通过设置rename=True自动重命名冲突字段。文中给出了具体示例及输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

nametuple的几个参数:

以Person=collections.namedtuple(‘Person’,'name age gender’)为例,其中’Person’是这个namedtuple的名称,后面的’name age gender’这三个字符串为namedtuple的三个元素

可以通过Bob=Person(name=’Bob’,age=30,gender=’male’)这种方式使用,这类似于Python中类对象 的使用。而且,我们也可以像访问类对象的属性那样使用Jane.name这种方式访问namedtuple的元素。

实例1:

#!/usr/bin/python3
 
import collections
 
MyTupleClass = collections.namedtuple('MyTupleClass',['name', 'age', 'job'])
obj = MyTupleClass("Tomsom",12,'Cooker')
print(obj.name)
print(obj.age)
print(obj.job)

执行结果:

Tomsom
12
Cooker

实例2:

#!/usr/bin/python3
 
import collections
 
Person=collections.namedtuple('Person','name age gender')
print( 'Type of Person:',type(Person))
Bob=Person(name='Bob',age=30,gender='male')
print( 'Representation:',Bob)
Jane=Person(name='Jane',age=29,gender='female')
print( 'Field by Name:',Jane.name)
for people in [Bob,Jane]:
    print ("%s is %d years old %s" % people)

执行结果:

Type of Person: <class 'type'>
Representation: Person(name='Bob', age=30, gender='male')
Field by Name: Jane
Bob is 30 years old male
Jane is 29 years old female

注意:

  1. 在使用namedtyuple的时候其中的名称不能使用Python的关键字,如:class def等;
  2. 不能有重复的元素名称,比如:不能有两个’age age’。
  3. 如果出现这些情况,程序会报错。但是,在实际使用的时候可能无法避免这种情况,比如:可能我们的元素名称是从数据库里读出来的记录,这样很难保 证一定不会出现Python关键字。这种情况下的解决办法是将namedtuple的重命名模式打开,这样如果遇到Python关键字或者有重复元素名 时,自动进行重命名。

看下面的代码:

import collections
with_class=collections.namedtuple('Person','name age class gender',rename=True)
print with_class._fields
two_ages=collections.namedtuple('Person','name age gender age',rename=True)
print two_ages._fields

其输出结果为:

('name', 'age', '_2', 'gender')
('name', 'age', 'gender', '_3')

即:使用rename=True的方式打开重命名选项。可以看到第一个集合中的class被重命名为 ‘_2’ ; 第二个集合中重复的age被重命名为 ‘_3’这是因为namedtuple在重命名的时候使用了下划线 _ 加元素所在索引数的方式进行重命名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值