当我们需要创建一个类似结构体的数据类型时,Python中的namedtuple就是一个很好的选择。namedtuple允许我们定义一个有名字的元组(tuple),元组中的每个元素都有相应的名称和位置。本篇攻略将为大家详细介绍创建和操作Python中的namedtuple。
定义namedtuple
定义namedtuple的首要步骤是导入namedtuple库,然后通过namedtuple()方法创建一种新类型。在namedtuple()的参数列表中,第一个参数是类型名称(字符串),第二个参数是元组属性名列表(字符串数组),这些属性名将成为namedtuple实例中元组元素的名称。
下面是一个定义Person类的例子:
from collections import namedtuple
#定义namedtuple类型
Person = namedtuple('Person',['name','age','gender'])
#创建namedtuple实例
p1 = Person('Tom',18,'Male')
p2 = Person('Amy',25,'Female')
#访问namedtuple属性
print(p1.name) #输出 'Tom'
print(p2.age) #输出 25
上述代码首先先从collections库导入namedtuple。然后,我们定义了一个名为Person的namedtuple。Person将包含3个属性,分别是name,age和gender,这些属性的顺序对位置是有讲究的。接着,我们创建了2个Person实例。最后,我们访问了这2个实例的属性。
操作namedtuple
访问元组中的元素可以使用点号语法。
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
print(p.x, p.y) #输出 '1 2'
namedtuple可以像元组一样进行拆包操作:
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
x, y = p
print(x, y) #输出 '1 2'
namedtuple有一个非常有用的方法_asdict(),可以将namedtuple转换为一个有序字典。
from collections import namedtuple
Person = namedtuple('Person',['name','age','gender'])
p = Person('Tom',20,'Male')
print(p._asdict()) #输出 OrderedDict([('name', 'Tom'), ('age', 20), ('gender', 'Male')])
namedtuple支持所有的元组操作:
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
q = Point(3, 4)
print(p[0]+q[0], p[1]+q[1]) #输出 '4 6'
print(p==Point(1, 2), p!=q) #输出 'True True'
如果我们需要修改元组中的某个元素,我们可以使用_replace()函数。
from collections import namedtuple
Person = namedtuple('Person',['name','age','gender'])
p1 = Person('Tom',20,'Male')
p2 = p1._replace(age=22)
print(p1) #输出 Person(name='Tom', age=20, gender='Male')
print(p2) #输出 Person(name='Tom', age=22, gender='Male')
上述代码中,我们对p1进行了一次“年龄”属性的修改,并将修改后的实例保存在p2中。
以上是Python中定义和操作namedtuple的完整攻略。无论是创建有名字的元组,还是操作,我们总结了常用的用法,并且给出了实例以供大家参考。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python定义具名元组实例操作 - Python技术站