在 PEP8 中,一般规则是在 UPPER_CASE 字符中声明常量。在现实生活中,可能有多种情况:
#!env python
DATABASE_HOST = 'localhost'
app = Flask('myapp')
base_two = partial(int, base=2)
通常我们将字符串类型或数字类型变量视为不可变的,因此是常量,而不是对象或函数。问题是 linter 无法进行类型检查。
您如何处理这种情况?我应该将它们大写还是只是在我的 linter 中禁用此规则?
这是一个很好的问题,即使有经验的 Python 程序员也会在如何应用 PEP 8 关于常量的指南方面犹豫不决。以下是分解方法:
PEP 8 说的是什么
PEP 8 指出“模块级常量”应该是大写的。但是,它对常量的定义相当模糊。一般来说,它指的是在你的代码库的生命周期中预计不会改变的值。
你的例子
让我们来看看你提供的例子:
-
DATABASE_HOST = 'localhost'
: 这可能是一个常量,因为它不太可能经常改变。但是,如果你的数据库连接细节可能在不同的环境(如开发、测试、生产)中发生变化,那么它就不应该被视为常量。 -
app = Flask('myapp')'
: 这不是一个常量。它是一个 Flask 应用程序的实例,并且在应用程序的生命周期中,它将被修改和与之交互。 -
base_two = partial(int, base=2)
: 这更像是一个实用函数,而不是一个常量。虽然它本身并没有改变,但它并不代表一个固定的值。
实用主义的方针
与其严格地遵守规则,不如考虑常量的意图。常量的目的是为了表示在你的代码库中具有固定且全局意义的值。过度使用大写可能会使你的代码难以阅读,特别是对于不真正是常量的值。
以下是一些实用的建议:
-
真正不变的值
: 对于那些永远不会改变且具有全局意义的值使用大写(例如,
PI = 3.14159
,MAX_UPLOAD_SIZE = 1024 * 1024
)。 - 配置设置 : 对于像数据库凭据或 API 密钥这样的配置设置,考虑使用一个单独的配置文件或环境变量。这将它们与你的代码逻辑分开,并使其更容易管理不同的环境。
- 不要过分担心 : 如果一个值不完全符合常量的定义,但它感觉像是一个在你的特定上下文中不应该改变的值,那么使用你的判断力。代码的可读性和一致性比严格遵守规则更重要。
Linter 配置
你可以配置你的 linter 以忽略某些命名约定或为特定情况创建例外。但是,始终如一地应用规则很重要。如果你决定在你的代码库中偏离 PEP 8,请记录下来并保持一致。
总之 : 在 Python 中使用常量时,请优先考虑清晰度、一致性和实用主义,而不是盲目地遵守规则。
标签:python From: 50794689