Python全局变量用法

时间:2013-01-21 18:29:59

标签: python

我是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']

这是一种可接受的方法吗?或者是否有一些我不知道的反响和副作用?

1 个答案:

答案 0 :(得分:7)

在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']