簡體   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