Python中namedtuple命名元祖的使用
什么是namedtuple?
namedtuple是python的collections模块中的一种数据类型,它是一个可命名的元组,它与元组不同之处在于,namedtuple拥有可命名的字段,而不是基于索引访问。如下所示,我们可以创建一个namedtuple:
from collections import namedtuple
Person = namedtuple('Person', ['name', 'age', 'gender'])
p = Person(name='Bob', age=25, gender='male')
print(p)
这里的Person是一个namedtuple的类型,它的属性有name、age、gender。我们通过name和属性来创建一个p对象。这个p对象将会类型为Person,有三个属性: name, age, gender。此时输出p的结果:Person(name='Bob', age=25, gender='male')
。
namedtuple与元组的区别
元组和namedtuple都是不可变的序列,它们之间的区别有:
- namedtuple支持可读性良好的属性名的访问。
比如我们要访问元组中的第一个元素,我们必须使用t[0]的方式进行索引。而在namedtuple中,我们可以通过p.name的方式来访问namedtuple对象的name属性。
- namedtuple是可以拥有方法的。
在元组中我们无法给元组添加方法,而在namedtuple中我们可以为类定义方法来供其各个实例使用。
如何使用namedtuple
namedtuple使用的基本方法十分简单,我们只需要引入这个模块,定义一个namedtuple类型,然后我们就可以创建namedtuple的实例。
下面我们提供两个创建namedtuple实例的例子。
例子一
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p1 = Point(1, 2)
p2 = Point(3, 4)
print(p1)
print(p2)
print(p1.x)
这里我们定义了一个类型为Point
的namedtuple。我们通过Point(1, 2)
和Point(3, 4)
分别创建了两个Point
类型的实例p1和p2,分别表示二维平面上的两个点(x=1,y=2)和(x=3,y=4)。在这个例子中,我们访问p1的横坐标和纵坐标分别是通过p1.x
和p1.y
访问的。
这里的输出结果为:
Point(x=1, y=2)
Point(x=3, y=4)
1
例子二
from collections import namedtuple
Animal = namedtuple('Animal', ['name', 'age', 'species'])
lucy = Animal(name='Lucy', age=4, species='cat')
lily = Animal(name='Lily', age=2, species='dog')
john = Animal(name='John', age=1, species='panda')
print("Lucy's age:", lucy.age)
print("Lily's species:", lily.species)
print(john)
这里我们定义了一个名为Animal
的namedtuple,它有三个属性:name、age和species。我们创建了三个实例对象:lucy
、lily
和john
,分别表示“猫”,“狗”和“熊猫”。在例子中,我们通过lucy.age
和lily.species
访问了两个对象的属性,输出结果如下:
Lucy's age: 4
Lily's species: dog
Animal(name='John', age=1, species='panda')
以上就是对namedtuple的基本介绍和两个简单的使用例子。namedtuple以其简洁而又易读的语法,以及对实例属性的自动命名而成为了Python编程语言的一等公民。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中namedtuple 命名元祖的使用 - Python技术站