Python 中的常量应该大写吗?

boh*_*boh 13 python

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

#!env python

DATABASE_HOST = 'localhost'
app = Flask('myapp')
base_two = partial(int, base=2) 
Run Code Online (Sandbox Code Playgroud)

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

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

FHT*_*ell 2

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

FLAG = object()

def func(arg_with_default = FLAG):
    if arg_with_default is FLAG:
         do_default()
    else:
         do_something_else(arg_with_default)
Run Code Online (Sandbox Code Playgroud)

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

t = (1, 2)
t[0] = 3  # error -- immutable
t = 3.14  # fine -- not constant
Run Code Online (Sandbox Code Playgroud)

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

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