2012-02-28 61 views
1

考虑这个如果我们只读取它,我们是否需要为变量声明全局变量?

# global variable 
i_am_global = {} 

def get_global(): 
    global i_am_global # declare 1 
    if i_am_global is not None: 
     return i_am_global 
    global i_am_global # declare 2 
    i_am_global = do_something() 
    return i_am_global 
def main(): 
    get_global() 
if __name__ == "__main__": 
    main() 
在这种情况下我们在哪里需要把全球

?在#声明1或在#声明2?为什么?

这是因为我听说(所以我问这个问题)全局导致内存开销。请纠正我的理解

谢谢

+2

“*全局导致内存开销*” - 您听错了。 Python中的'global'语句不会导致内存开销。 – 2012-02-28 18:16:43

+0

当你尝试了两个地方时,你观察到了什么?当你在没有'全球'声明的情况下尝试它时,你观察到了什么? – 2012-02-28 18:18:02

+0

需要在#2而不是在#1。看看这个问题:http://stackoverflow.com/questions/9366212/correct-use-of-global-variables-in-python-3 – 2012-02-28 18:18:17

回答

1

如果你只读过的变量,那么你就必须使用global,但我个人对纪录片做的原因。我也使用全局的命名约定。我不认为global关键字存在内存开销,但通常认为自己的全局变量不受欢迎。

0

所有顶级函数和类也都是全局变量。因此,声明任何对象是全局的都没有问题。

但是你应该明白,任何变量,其名称都没有用下划线作为该模块的公共接口和要导入的项目。考虑以下代码

#module mutual_imports.py 
global_object = 2 

def changeGlobalObject(): 
    global global_object 
    global_object = "two" 

可以检查此模块:

>>> from mutual_imports import global_object, changeGlobalObject 
>>> global_object 
2 
>>> changeGlobalObject() 
>>> global_object 
2 
>>> from mutual_imports import global_object 
>>> global_object 
'two' 

那你想想,如果你impoprting它不同倍,可以是不同的项目。

所有可变的东西都是一些对象的可变状态,只是因为它更容易和更清晰地处理它。

相关问题