Python命名约定-namedtuples [重复]

Posted

技术标签:

【中文标题】Python命名约定-namedtuples [重复]【英文标题】:Python naming convention - namedtuples [duplicate] 【发布时间】:2016-07-22 03:05:48 【问题描述】:

我是 Python 新手,我一直在阅读在线文档并(尝试)关注PEP 0008 以获得良好的 Python 代码风格。 很好奇我在研究re库的时候在Python官方docs找到的代码段:

import collections

Token = collections.namedtuple('Token', ['typ', 'value', 'line', 'column'])

我不明白为什么Token 变量的首字母大写;我已通读 PEP 0008,对于我所看到的内容没有任何参考。如果它是一个常数(据我所知不是),它不应该是 token 还是 TOKEN

【问题讨论】:

因为它是一个类——namedtuple 是一个类工厂。 【参考方案1】:

在您提供的代码段中,Tokennamed tuple,绝对不是常数。它不遵循其他变量名的命名风格,只是为了强调它是一个类工厂函数。 如果您将其编写为 token,则 PEP 0008 样式检查器(例如 PyCharm )不会发出警告,但我认为这不是一个好习惯,因为这样不区分为类工厂名。

所以,namedtuple 属于 PEP 0008 中的 Class names。太糟糕了,没有更明确地说明。 除了你提到的writing a tokenizer 的例子,这也可以在collections.namedtuple docs 例子中看到:

Point = namedtuple('Point', ['x', 'y'])
Point3D = namedtuple('Point3D', Point._fields + ('z',))
Book = namedtuple('Book', ['id', 'title', 'authors'])

【讨论】:

Anti Haapala 的回答打败了我。很好的答案。 你的答案更好:d @Yannis,值得包括来自类名链接的信息,类名通常应使用 CapWords 约定,因此命名为元组【参考方案2】:

这里的关键是collections.namedtuple。正如文档所说,

collections.namedtuple(typename, field_names, verbose=False, rename=False)

返回一个名为typename 的新tuple 子类。新的子类用于创建类似tuple 的对象,这些对象具有可通过属性查找访问的字段以及可索引和可​​迭代的。子类的实例还有一个有用的文档字符串(带有 typename 和 field_names)和一个有用的 __repr__() 方法,它以 name=value 格式列出元组内容。

没有违反 PEP 8; Token 是一个用户定义的类,它的名字应该大写。

【讨论】:

以上是关于Python命名约定-namedtuples [重复]的主要内容,如果未能解决你的问题,请参考以下文章

python namedtuple(命名元组)

python namedtuple命名元组

Python namedtuple(命名元组)使用实例

Python_collection_namedtuple可命名元组

python 命名元组(namedtuple)

命名元组内命名元组的 Python 语法