我是一个用Python编写的初学者,这对我来自Java来说有点跳跃.我现在的问题是在Python中使用全局变量来表示常量等.在Java中,我们对常量有两种想法,我们可以这样:
private static final HOME_URL_CONST = "localhost:8080";
Run Code Online (Sandbox Code Playgroud)
或者,如果我们需要在运行时分配值:
private static HOME_URL = "";
public void init(){
HOME_URL = "localhost:8080";
}
Run Code Online (Sandbox Code Playgroud)
关键是在后一种情况下,一旦设置了静态变量,它就会保持设置状态.但是在Python中,情况并非如此.如果我创建一个全局变量然后在一个函数中分配它,那么该变量将只在该函数内具有指定的值.现在我有这样的事情:
def initialize():
global HOME_URL
with open("urls.txt", 'rb') as f:
HOME_URL = json.load(f.read())['urls']
Run Code Online (Sandbox Code Playgroud)
这是一种可接受的方法吗?或者是否有一些我不知道的反响和副作用?
在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']
Run Code Online (Sandbox Code Playgroud)