我是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']
这是一种可接受的方法吗?或者是否有一些我不知道的反响和副作用?
答案 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']