Python 中的常量究竟由什么构成?

Bra*_*mon 2 python pep8 python-3.x

PEP 8规定

常量通常在模块级别定义,并全部用大写字母书写,并用下划线分隔单词。示例包括 MAX_OVERFLOWTOTAL

我知道这只是一个命名约定,但我很想知道是否有一个官方或广泛接受的定义来定义常量与半私有变量的实际构成。

这是否仅限于您所谓的数学常数?(即float、int、complex)

或者它会包括datetime.date在模块级别定义的对象或字符串之类的东西吗?具有混合类型的键/值的字典怎么样?如果答案是否定的,这些类型的对象是否应该像(准)私有变量一样定义_leading_underscore

Ant*_*ala 6

好吧,PEP 8编码约定主要是Python标准库编写的:

本文档给出了构成主要 Python 发行版中标准库的 Python 代码的编码约定。

仔细查看 Python 3.5 标准库中的一些模块以及常见的字符串和数字,我们会发现类似的内容

UUIDs,uuid.py:

NAMESPACE_URL = UUID('6ba7b811-9dad-11d1-80b4-00c04fd430c8')
Run Code Online (Sandbox Code Playgroud)

正则表达式,smtplib.py

OLDSTYLE_AUTH = re.compile(r"auth=(.*)", re.I)
Run Code Online (Sandbox Code Playgroud)

字典,plistlib.py:

_BINARY_FORMAT = {1: 'B', 2: 'H', 4: 'L', 8: 'Q'}
Run Code Online (Sandbox Code Playgroud)

frozensets,asyncore.py:

_DISCONNECTED = frozenset({ECONNRESET, ENOTCONN, ESHUTDOWN, ECONNABORTED, EPIPE, ...
Run Code Online (Sandbox Code Playgroud)

datetime.datecalendar.py 中的a

_EPOCH_ORD = datetime.date(EPOCH, 1, 1).toordinal()
Run Code Online (Sandbox Code Playgroud)

因此,基本上任何在整个执行期间都应该保持不变的东西,即使它是可变类型(plistlib.py 中的字典)。