繁体   English   中英

Python命名约定 - namedtuples

[英]Python naming convention - namedtuples

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

import collections

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

我无法理解为什么Token变量以首字母大写命名; 我已经阅读了PEP 0008并且没有参考我所看到的内容。 如果它不是token而不是TOKEN如果它是一个常量(我知道它不是)吗?

在您提供的代码段中, Token是一个命名元组 ,绝对不是常量。 它不遵循其他变量名称命名样式,只强调它是类工厂函数的事实。 如果你把它写成token ,PEP 0008样式检查器(比如PyCharm )就不会发出警告,但我认为这不是好习惯,因为这样做不会将它区分为类工厂名称。

所以,namedtuples归入类名在PEP 0008太糟糕了,没有说明更明确。 除了你提到的编写tokenizer的例子,这也可以在collections.namedtuple文档示例中看到:

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM