当我们需要定义一个简单的类来存储数据时,Python 的 namedtuple 是一种很好的选择。namedtuple 可以看作是一个不可变的类,可以按名称来访问元组的各个元素,从而避免了索引数字所带来的混淆和错误。
使用 namedtuples 的主要优点是代码的可读性和设计的整洁性。因为它们是不可变的,所以它们适用于作为全局常量的对象或数据记录的值。
下面是具体的使用攻略:
1. 创建 namedtuple
首先,我们需要导入 namedtuple:
from collections import namedtuple
接下来,我们可以用 namedtuple 创建一个新的对象,实例化它并将其分配给变量。namedtuples 需要两个参数:一个是名称,另一个是一个元组,元组中包含各个元素的名称。例如,我们可以从我的网站中创建一个 namedtuples:
Color = namedtuple('Color', ['red', 'green', 'blue'])
c = Color(25, 50, 75)
上述代码就创建了一个名为 "Color" 的 named tuple,包含三个域 red、green 和 blue,并将变量 c 实例化为 Color 类型的对象。
2. 访问 namedtuple
访问 namedtuple 有两种方法:
(1) 通过索引访问
可以通过索引来访问 namedtuple。例如,我们可以使用以下方式来访问命名元组 c 的第一个元素 red:
print(c[0]) #输出 25
(2) 通过名称访问
我们可以使用名称来直接访问 namedtuple 的元素。例如,我们可以使用以下方式来访问命名元组 c 的第一个元素 red:
print(c.red) #输出 25
注意:由于 namedtuples 是不可变的,因此我们不能使用代码 c.red = 35 处理 namedtuples。
3. 实例化
实例化是指创建一个新的 namedtuple 类型的对象。有三种方法可以实例化 namedtuples。
(1) 通过 iterable 实例化
我们可以使用 iterable 来实例化 namedtuples,这种方式需要注意的是 iterable 中元素的数量必须和 namedtuples 中定义的元素数量一致。例如:
c1 = Color(*[255,255,0])
(2) 通过关键字实例化
我们可以使用关键字来实例化 namedtuples,在这种情况下,不需要按位置定义值,只需要用字典中的键值对声明它们就可以了。例如:
c2 = Color(red=255, green=0, blue=0)
(3) 通过 _make() 方法实例化
我们可以使用 _make() 方法来实例化 namedtuples,它接收一个可迭代对象作为参数。例如:
data = [225, 200, 125]
c3 = Color._make(data)
示例
from collections import namedtuple
# 定义namedtuple Color,包括三个域 red、green 和 blue
Color = namedtuple('Color', ['red', 'green', 'blue'])
# 实例化namedtuple,通过 iterable 实例化
c1 = Color(*[255,255,0])
print(c1) #输出: Color(red=255, green=255, blue=0)
# 实例化namedtuple,通过关键字实例化
c2 = Color(red=255, green=0, blue=0)
print(c2) #输出: Color(red=255, green=0, blue=0)
# 实例化namedtuple,通过 _make() 方法实例化
data = [225, 200, 125]
c3 = Color._make(data)
print(c3) #输出: Color(red=225, green=200, blue=125)
以上代码演示了使用 namedtuple 的三种实例化方法。在 c1 中,我们使用了 iterable 来实例化 namedtuples。在 c2 中,我们使用关键字来实例化 namedtuples。在 c3 中,我们使用 _make() 方法来实例化 namedtuples。
另一种示例,请看下面的代码段:
from collections import namedtuple
# 定义namedtuple User,包括三个域 name、age 和 gender
User = namedtuple('User', ['name', 'age', 'gender'])
# 实例化namedtuple
users = [
User(name='Tom', age=18, gender='M'),
User(name='Jerry', age=20, gender='M'),
User(name='Lucy', age=22, gender='F')
]
# 根据性别统计数量
gender_counter = dict()
for u in users:
if u.gender not in gender_counter:
gender_counter[u.gender] = 1
else:
gender_counter[u.gender] += 1
print(gender_counter) #输出:{'M': 2, 'F': 1}
以上代码演示了如何使用 namedtuple 来创建一个用户记录的列表,并按性别统计用户数量。使用 namedtuple 能够更直观地定义数据结构,而且代码的可读性更高。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python具名元组(namedtuple)的具体使用 - Python技术站