外语不好,机翻勿喷,方便回顾 (逃~
具有命名字段的元组的工厂函数
命名元组赋予元组中每个位置的含义并允许更具可读性的自编写代码。
它们可以在任何使用常规元组的地方使用,并且可以通过名称而不是位置索引来添加字段。
用法:
collections.namedtuple(typename, field_names, *, verbose=False, rename=False, module=None)
返回一个名为typename的新的元组子类。 新的子类用于创建具有可通过属性查找访问的字段的类似元组的对象,以及可索引和可迭代的对象。 子类的实例也有一个有用的docstring(带有typename和field_names)和一个有用的__repr __()方法,它以name = value格式列出元组内容。
field_names是一串字符串,如['x','y']。 或者,field_names可以是单个字符串,每个字段名用空格和/或逗号分隔,例如'x y'或'x,y'。
任何有效的Python标识符都可以用于字段名称,除了以下划线开头的名称。
有效标识符由字母,数字和下划线组成,但不以数字或下划线开头,并且不能是关键字,例如class,for,return,global,pass或raise。
如果 rename 为true,则无效的字段名会自动替换为位置名称。
例如,将['abc','def','ghi','abc']转换为['abc','_1','ghi','_3'],从而消除关键字def和重复字段名abc。
如果verbose为true,则在构建它之后打印类定义。 此选项已过时; 相反,打印_source属性更简单。
如果定义了module,则指定元组的__module__属性将设置为该值。
命名元组实例没有每个实例字典,因此它们是轻量级的,并且不需要比常规元组更多的内存。
在版本3.1中更改:添加了对rename的支持。
在版本3.6中更改:verbose 和 rename 参数成为 keyword-onle 参数。
在版本3.6中更改:添加了module参数。
命名元组对于将字段名称分配给由csv或sqlite3模块返回的结果元组特别有用:
除了从元组继承的方法外,命名元组还支持三个附加方法和两个属性。
为防止与字段名冲突,方法和属性名称以下划线开头。
(1)类方法:
somenamedtuple._make(iterable)
从现有序列创建新实例或迭代的类方法。
somenamedtuple._asdict()
返回一个新的OrderedDict,它将字段名称映射到它们相应的值
somenamedtuple._replace(**kwargs)
返回指定元组的新实例,用新值替换指定字段:
somenamedtuple._source
一个包含纯Python源代码的字符串,用于创建指定的元组类。 源使命名的元组自我记录。 它可以打印,使用exec()执行,或保存到文件并导入。
New in version 3.3
somenamedtuple._fields
列出字段名称的字符串元组。 用于内省和从现有命名元组中创建新的命名元组类型。
要检索名称存储在字符串中的字段,请使用getattr()函数:
要将字典转换为命名元组,请使用双星运算符(如解包参数列表中所述):
由于命名元组是一个常规的Python类,因此使用子类很容易添加或更改功能。
以下是如何添加计算字段和固定宽度的打印格式:
上面显示的子类将__slots__设置为一个空元组。 这有助于通过防止创建实例字典来降低内存需求。
子类化对于添加新的存储字段没有用处。 相反,只需从_fields属性创建一个新的命名元组类型:
可以通过直接分配__doc__字段来自定义文档字符串:
默认值可以通过使用_replace()来实现原型实例: