2017-09-05 268 views
0

最近我發現了一個我的代碼中的一個bug,它足夠讓我感到奇怪。主要的問題是,下面的代碼工作:Python全局變量範圍

def test(): 
    print(memory) 


if __name__ == "__main__": 
    memory = 1 
    test() 

如果memory是在文件的頂部定義,但是這似乎是打破所有範圍規則對我來說這將是明顯的。但是一定有一些原因。

+0

似乎是合乎邏輯我。在調用test()時,已經定義了「memory」。 – ifconfig

+1

Python會執行您的程序以便讀取它。當yiu定義一個函數時,它只會在你調用它的時候纔會被執行,所以Python在第一次運行時甚至都沒有看到。你可能會認爲它會用你自己的函數內容替代你的調用'test()' – avloss

+0

@ifconfig在經驗之後邏輯嗎?我的意思是我曾經使用C語言和在聲明不編譯前使用全局變量的代碼。這對我來說似乎合乎邏輯。 –

回答

0

即使內存變量的工作看起來很奇怪,但它是預期的。 Variable Scope未被破壞!

如果__name__ ==「__main__」: - 此語句用來定義或聲明時,源文件直接調用執行,而不是導入到另一個文件,並從第三模塊稱爲全局功能。

因此,當你直接執行源文件時,它首先將定義變量 - 存儲器,是全球性的,並且可以在功能測試作爲全局變量進行訪問(沒有掩蓋發生)。

請參考下面的鏈接,更多的瞭解 - What does if __name__ == "__main__": do?