Skip to main content

Python小知识 - 什么是Namedtuples,如何使用Namedtuples

Python小知识 - 什么是Namedtuples,如何使用Namedtuples

Python小知识 - 什么是Namedtuples,如何使用Namedtuples

什么是Namedtuples,如何使用Namedtuples

Namedtuples是一个轻量的并且很容易创建的对象类型

Namedtuples的实例可以像对象实例一样使用

Namedtuples跟struct很像

Namedtuples是不可变的

Namedtuples类型被添加在Python 2.6 和 Python 3.0

下面看个例子

from math import sqrt

p1 = (1, 2)
p2 = (2, 3)

line_length = sqrt((p1[0] - p2[0])**2 + (p1[1] - p2[1])**2)

print(line_length)

如果使用Namedtuples,上面代码的可读性将会稍微有些改善

下面看代码

from math import sqrt
from collections import namedtuple

Point = namedtuple('Point', ['x', 'y'])

p1 = Point(1, 2)
p2 = Point(2, 3)

line_length = sqrt((p1.x - p2.x)**2 + (p1.y - p2.y)**2)

print(line_length)

Namedtuples也兼容了第一个例子中的使用方式,代码如下

from math import sqrt
from collections import namedtuple

Point = namedtuple('Point', ['x', 'y'])

p1 = Point(1, 2)
p2 = Point(2, 3)

line_length = sqrt((p1[0] - p2[0])**2 + (p1[1] - p2[1])**2)

print(line_length)

Point = namedtuple('Point', ['x', 'y'])

这段代码也可以用下面的方式来声明

Point = namedtuple('Point', ('x y'))

用个例子来说明下

from math import sqrt
from collections import namedtuple

Point = namedtuple('Point', ('x y'))

p1 = Point(1, 2)
p2 = Point(2, 3)

line_length = sqrt((p1[0] - p2[0])**2 + (p1[1] - p2[1])**2)

print(line_length)

再来看下,Namedtuples是如何不可变的

示例如下

from collections import namedtuple

Point = namedtuple('Point', ('x y'))

p = Point(1, 2)

p.x = 3

运行结果报错如下

Traceback (most recent call last):
  File "main.py", line 95, in <module>
    p.x = 3
AttributeError: can't set attribute

参考文章:地址

版权声明

版权声明

张大鹏 创作并维护的 Walkerfree 博客采用 创作共用保留署名-非商业-禁止演绎4.0国际许可证。本文首发于 Walkerfree 博客(http://www.walkerfree.com/),版权所有,侵权必究。本文永久链接:http://www.walkerfree.com/article/204