下面是Python中namedtuple
函数的用法解析攻略:
一、什么是namedtuple
namedtuple
是python内置模块collections
中的工厂函数,它返回一个类,这个类的实例就像一个普通元组(tuple),但是允许使用属性的方式进行访问。
和元组一样,namedtuple
的实例是不可变的,但是因为它们是类的实例,因此在创建时可以给它的每个属性命名。
下面是一段具体的代码,用到了collections
内置模块的namedtuple
:
from collections import namedtuple
# 定义一个namedtuple类型User,并给它命名
User = namedtuple('User', ['name', 'age', 'gender'])
# 创建一个User对象
user = User(name='Tom', age=20, gender='male')
# 访问属性
print(user.name, user.age, user.gender)
这个代码定义了一个User
类,这个类有3个属性,分别是name
、age
和gender
。在创建User
实例时,需要给这3个属性传入相应的值。
二、namedtuple
函数的用法
(一)定义namedtuple
类型
namedtuple
的第一个参数是类名,第二个参数是属性列表。属性可以是任何有意义的字符串,它们会被自动转化为合法的标识符(保证不重复,不以数字开头等)。
示例代码:
from collections import namedtuple
# 定义一个namedtuple类型Point,并给它命名
Point = namedtuple('Point', ['x', 'y'])
# 创建一个Point对象
p = Point(x=1, y=2)
# 访问属性
print(p.x, p.y)
这个代码定义了一个叫做Point
的namedtuple
类型,它有2个属性,分别是x
和y
。在创建Point
实例时,需要给这2个属性传入相应的值。
(二)创建namedtuple
实例
可以通过调用namedtuple
返回的类来创建实例对象,从而访问其属性。
示例代码:
from collections import namedtuple
# 定义一个namedtuple类型Point,并给它命名
Point = namedtuple('Point', ['x', 'y'])
# 创建一个Point对象
p = Point(x=1, y=2)
# 访问属性
print(p.x, p.y)
这个代码创建了一个Point
类的实例对象p
,通过p.x
和p.y
访问其属性值。
(三)属性值的访问
namedtuple
类的实例在访问属性值上和普通对象和元组没有区别,可以使用属性名或者使用类似于tuple
的索引方式访问。
示例代码:
from collections import namedtuple
# 定义一个namedtuple类型Point,并给它命名
Point = namedtuple('Point', ['x', 'y'])
# 创建一个Point对象
p = Point(x=1, y=2)
# 属性值的访问
print(p.x, p.y)
print(p[0], p[1])
输出结果:
1 2
1 2
从输出结果可以看出,无论是通过属性名还是使用类似于元组的索引方式,都可以访问属性值。
(四)namedtuple
的嵌套以及继承
namedtuple
可以嵌套其他的数据类型,也可以继承其他的类,从而实现更加灵活多样的数据类型。
示例代码1:
from collections import namedtuple
# 定义一个namedtuple类型Rectangle,并给它命名
Rectangle = namedtuple('Rectangle', ['upper_left', 'bottom_right'])
# 定义一个namedtuple类型Point,并给它命名
Point = namedtuple('Point', ['x', 'y'])
# 创建Rectangle对象
rect = Rectangle(Point(1, 2), Point(3, 4))
# 访问属性值
print(rect.upper_left.x, rect.upper_left.y)
print(rect.bottom_right.x, rect.bottom_right.y)
输出结果:
1 2
3 4
这个代码中,Rectangle
类型实例的属性upper_left
和bottom_right
都是Point
类型的实例。
示例代码2:
from collections import namedtuple
# 定义一个namedtuple类型Person,并给它命名
Person = namedtuple('Person', ['name', 'age'])
# 定义一个新的namedtuple类型Student,继承自Person,并添加新的属性
Student = namedtuple('Student', Person._fields + ('university',))
# 创建一个Person对象
person = Person('Tom', 20)
# 创建一个Student对象
student = Student(*person, 'MIT')
# 访问属性值
print(student.name, student.age, student.university)
输出结果:
Tom 20 MIT
这个代码中,Student
类型继承自Person
类型,并添加了一个名为university
的额外属性。在创建Student
对象时,需要先创建一个Person
对象,再把它和university
属性的值拼接成一个新的元组,然后使用元组展开语法(*
)传递给Student
类型实例的构造函数。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python中namedtuple函数的用法解析 - Python技术站