2013-02-12 57 views
0

在這裏發佈整個實際代碼時看不到太多要點,所以我會盡我所能來推廣我的問題。 函數(讓它被命名爲x)在代碼的開始處定義。 然後,該類(它有一個方法z,z最終調用x)從單獨的.py文件中導入。該類的對象被創建。調用z之後,我得到「全局名稱」x'未定義「錯誤。 然後我想我將我的.py文件中的所有代碼粘貼到一個文件中,並將def(x)放在上面,然後看看會發生什麼。當然,它按預期工作。不要以前面的方式(我寧願堅持使用)遇到什麼問題,是不是幾乎一樣?導入類和NameError

回答

2

全局是每個模塊和功能查找全局,只在定義的模塊中。

所以一個名爲bar模塊中定義的類Foo,需要訪問一個名爲spam功能將查找該函數在它自己的命名空間中運行,因此在模塊bar中。

如果函數在它們被導入到的模塊中查找全局變量,那麼您將不得不重複導入您想要使用的任何函數的所有依賴項。這是不實際的。

+0

感謝您爲我清理+1。儘管如此,我還是沒有考慮一個更實用的方法來運行我的程序,而不是更改「bar」(這是一種模板),或者將所有內容放在一個模塊中。 – morris 2013-02-12 18:02:46

+0

morris:模塊可以導入其他模塊,這些模塊有它們需要的東西,所以不需要將所有東西放在一個模塊中。 – martineau 2013-02-12 18:09:43

+0

@morris:函數也是第一類對象;如果您需要API來執行任意函數,則可以傳入對函數的引用(使用該名稱而不調用該函數)。 – 2013-02-12 18:11:33