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】:
在您提供的代码段中,Token
是named 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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章