python-nametuple-命名元祖

本文详细介绍了Python的命名元组`namedtuple`,包括它的用途、参数介绍和特有的属性与方法。`namedtuple`使得元组的元素具有可读性强的名称,并允许像访问字典一样访问元组的值。文中详细阐述了`typename`、`field_names`、`rename`、`defaults`和`module`等参数的作用,以及`index()`、`count()`、`_make()`、`_asdict()`和`_replace()`等方法的使用。此外,还讨论了命名元组与csv文件交互的可能性。
摘要由CSDN通过智能技术生成

1. 简介

官方文档:https://docs.python.org/3/library/collections.html#collections.namedtuple
命名元组为元祖中每个字段命名,使其能够像访问字典一样访问元祖中的值,使其更具有可读性,它具有普通元祖的方法和属性,也具有普通元祖不具有的独特方法和属性。
普通元祖和命名元祖最大区别之一在于:普通元祖的值定义完成后无法修改,但是命名元祖里面的值都是可以修改的

2. 参数介绍

先来看下 namedtuple 的代码定义

# namedtuple.__init__.py

def namedtuple(typename, field_names, *, rename=False, defaults=None, module=None):
    """Returns a new subclass of tuple with named fields.

在定义 namedtuple 的时候有五个给出的有定义的参数,下面分别看下每个参数的含义

2.1 typename

typename 返回一个名为 typename 的新元组子类。

# namedtuple_test.py

from collections import namedtuple

Position = namedtuple('Position', 'x, y, z')
p1 = Position('1', 2, 3)

print(p1, type(p1))

# 输出
Position(x='1', y=2, z=3) <class '__main__.Position'>

这样可能不能很好的看出 typename 的作用,我们来修改下代码,就可以更容易的看出

from collections import namedtuple

Position = namedtuple('PositionName', 'x, y, z')
p1 = Position('1', 2, 3)

print(p1, type(p1))

# 输出
PositionName(x='1', y=2, z=3) <class '__main__.PositionName'>

可以看到为元祖真正命名的是 typename 这个参数。

我们可以使用 namedtuple.__repr__() 方法来查看 typename 的值,不过没有什么实用意义

Position = namedtuple('PositionName', 'x, y, z')

p = Position('1', 2, 3)
print(p.__repr__())

# 输出
PositionName(x='1', y=2, z=3)

2.2 field_names

field_names 元祖中每个字段的名称定义,是一个字符串序列。有三种方式可以定义

  • 可以是一个列表例如 ['x', 'y', 'z']
  • 也可以是一个用空格分隔的单个字符串例如 'x, y, z'
  • 或是用逗号分隔的单个字符串 'x y z'
from collections import namedtuple

Position1 = namedtuple('PositionName1', 'x, y, z')
Position2 = namedtuple('PositionName2', ['x', 'y', 'z'])
Position3 = namedtuple('PositionName3', 'x y z')
p1 = Position1('1', 2, 3)
p2 = Position2('1', 2, 3)
p3 = Position3('1'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值