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

时间:2017-09-01 16:28:45

标签: python python-3.x pep8

PEP 8 prescribes

  

常量通常在模块级别定义并全部写入   带下划线分隔单词的大写字母。例子包括   MAX_OVERFLOWTOTAL

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

这仅限于您可能称之为mathematical constants的内容吗? (即浮点数,整数,复数)

或者它是否包含datetime.date对象或在模块级别定义的字符串?具有键/混合类型值的字典怎么样?如果答案为否,那么是否应将这些类型的对象定义为_leading_underscore的(准)私有变量?

2 个答案:

答案 0 :(得分:3)

嗯,PEP 8编码约定主要是 Python标准库

  

本文档提供了Python代码的编码约定,包括主Python发行版中的标准库。

通过Python 3.5标准库中的一些模块,以及通常的字符串和数字,可以找到像

这样的内容

UUID s,uuid.py:

NAMESPACE_URL = UUID('6ba7b811-9dad-11d1-80b4-00c04fd430c8')

正则表达式,smtplib.py

OLDSTYLE_AUTH = re.compile(r"auth=(.*)", re.I)

字典,plistlib.py:

_BINARY_FORMAT = {1: 'B', 2: 'H', 4: 'L', 8: 'Q'}

frozenset s,asyncore.py:

_DISCONNECTED = frozenset({ECONNRESET, ENOTCONN, ESHUTDOWN, ECONNABORTED, EPIPE, ...

:calendar.py

中的datetime.date
_EPOCH_ORD = datetime.date(EPOCH, 1, 1).toordinal()

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

答案 1 :(得分:0)

在python的大部分内容中,常量的PEP8命名约定只是帮助任何正在阅读代码的程序员知道不要改变那个特定的“常量”在其他语言如C中它实际上可以减少执行代码所需的时间。

The Benefits of Constants

上查看此帖子

常数只是一个永不改变的值。

在OOP中,声明私有或公共常量很有用,但对于python,没有与“常量”和常规变量的功能分离。

如果你将一个值声明为常量,其他编程语言中还有一个支持真常量的东西,那么即使你稍后尝试重新赋值,该值也不会改变。但是在python中没有常量,因此我们使用命名约定来帮助我们记住不要更改该值。