6

我是 Python 编码的初学者,这对来自 Java 的我来说有点跳跃。我现在的问题是关于在 Python 中将全局变量用于常量等。在 Java 中,我们对常量有两种想法,我们可以有这样的东西:

private static final HOME_URL_CONST = "localhost:8080";

或者如果我们需要在运行时赋值:

private static HOME_URL = "";
public void init(){ 
  HOME_URL = "localhost:8080"; 
}

关键是在后一种情况下,一旦设置了静态变量,它就会保持设置状态。但是在 Python 中,情况并非如此。如果我创建一个全局变量,然后在函数中分配它,那么该变量将仅在该函数内具有分配的值。现在我有这样的事情:

def initialize():
  global HOME_URL
  with open("urls.txt", 'rb') as f:
    HOME_URL = json.load(f.read())['urls']

这是一种可接受的方法吗?还是有一些我不知道的影响和副作用?

4

1 回答 1

9

在 Python 中,由于其动态特性,没有定义 const 变量本身。常量由 Style 决定,因此引用PEP 8

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

因此,如果您希望将变量用作常量,请在模块级别定义它,用下划线分隔的大写命名并遵循约定,以便在任何其他范围内都没有与常量变量冲突的其他变量。在任何情况下,您都不需要任何全局限定符,因为在模块级别定义的变量在任何情况下都将在函数级别的范围内。

所以在这种特殊情况下

HOME_URL = "localhost:8080"
def initialize():
      #global HOME_URL #You don't need this
      home_url = HOME_URL
      with open("urls.txt", 'rb') as f:
           #Constants are not supposed to mutate
           home_url = json.load(f.read())['urls']
于 2013-01-21T18:40:03.077 回答