2012-02-28 37 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它不同倍,可以是不同的項目。

所有可變的東西都是一些對象的可變狀態,只是因爲它更容易和更清晰地處理它。

相關問題