对元组里数据的访问只能通过索引来进行,假设我们想用元组来表示一个平面上的坐标,可以这样写
point = (3, 5)
# 输出x,y坐标
print(point[0], point[1])
namedtuple 允许我们创建有属性名称的元组,这样就可以通过属性名称来获取数据
from collections import namedtuple
Point = namedtuple('Point', ['x_coord', 'y_coord'])
print(issubclass(Point, tuple))
point = Point(3, 5)
# 输出x,y坐标
print(point.x_coord, point.y_coord)
程序输出结果
True
3 5
特别强调一点,Point是tuple的子类
有人会有疑惑,对于上面的问题,明明可以用类来解决啊,为什么弄出一个namedtuple?
class Point():
def __init__(self, x, y):
self.x_coord = x
self.y_coord = y
point = Point(3, 5)
# 输出x,y坐标
print(point.x_coord, point.y_coord)
为什么不使用类,而使用namedtuple,最常见的解释是定义一个类大材小用,没有必要,对此我是不认同的,原因有两点:
真正的原因是元组,元组是不可变对象,因此元组可以做字典的key,可以存储到集合中,如果我们用自定义的普通类来替代namedtuple,一旦需要做字典的key,那么普通的类创建出的对象就无能为力了。而namedtuple创建的是tuple的子类,因此具有tuple的一切属性。
QQ交流群: 211426309