首页 > 解决方案 > 我应该在 Python 中大写常量吗?

问题描述

在 PEP8 中,一般规则是在 UPPER_CASE 字符中声明常量。在现实生活中,可能有多种情况:

#!env python

DATABASE_HOST = 'localhost'
app = Flask('myapp')
base_two = partial(int, base=2) 

通常我们认为字符串类型或数值类型的变量是不可变的,因此是常量,而不是对象或函数。问题是 linter 无法进行类型检查。

你如何处理这个案子?我应该将它们大写还是只在我的 linter 中禁用此规则?

标签: python

解决方案


就个人而言,我唯一一次利用某些东西是在外部提供一个永远不应该改变的价值时。否则,会发现将其保留为小写,特别是如果该值只是逻辑流程的一部分。所以

FLAG = object()

def func(arg_with_default = FLAG):
    if arg_with_default is FLAG:
         do_default()
    else:
         do_something_else(arg_with_default)

我认为您将不变性与常量混淆了。

t = (1, 2)
t[0] = 3  # error -- immutable
t = 3.14  # fine -- not constant

Python 没有常量的概念。每个变量都可以被覆盖,因此为什么在重要的变量不改变的情况下,这也许是通过使用大写来使这一点变得明显的时候了。

如果 linter 抱怨您没有大写不需要的东西,我会禁用该选项。


推荐阅读