導(dǎo)入模塊中全局變量的可見性我遇到了一些在Python腳本中導(dǎo)入模塊的墻。我將盡我最大的努力來描述這個(gè)錯(cuò)誤,為什么我會遇到它,以及為什么我要綁定這個(gè)特定的方法來解決我的問題(稍后我將對此進(jìn)行描述):假設(shè)我有一個(gè)模塊,在其中我定義了一些實(shí)用函數(shù)/類,這些函數(shù)/類引用了將這個(gè)輔助模塊導(dǎo)入到的命名空間中定義的實(shí)體(讓“a”是這樣一個(gè)實(shí)體):模塊1:def f():
print a然后我有一個(gè)主程序,其中定義了“a”,我想將這些實(shí)用程序?qū)肫渲校篿mport module1
a=3module1.f()執(zhí)行程序?qū)⒂|發(fā)以下錯(cuò)誤:Traceback (most recent call last):
File "Z:\Python\main.py", line 10, in <module>
module1.f()
File "Z:\Python\module1.py", line 3, in f print aNameError: global name 'a' is not defined也有人提出了類似的問題。在過去(兩天前,d‘呃)和一些解決方案已經(jīng)提出,但我不認(rèn)為這些真的符合我的要求。以下是我的特殊背景:我正在嘗試制作一個(gè)Python程序,它連接到MySQL數(shù)據(jù)庫服務(wù)器,并使用GUI顯示/修改數(shù)據(jù)。為了整潔起見,我在一個(gè)單獨(dú)的文件中定義了一系列與MySQL相關(guān)的輔助/實(shí)用程序函數(shù)。然而,它們都有一個(gè)公共變量,這是我最初定義的。內(nèi)實(shí)用程序模塊,哪個(gè)是光標(biāo)對象來自MySQLdb模塊。后來我意識到光標(biāo)對象(用于與db服務(wù)器通信)應(yīng)在主模塊中定義,這樣,主模塊和導(dǎo)入到其中的任何東西都可以訪問該對象。最終的結(jié)果應(yīng)該是這樣的:公用事業(yè)_module.py:def utility_1(args):
code which references a variable named "cur"def utility_n(args):
etcetera我的主要模塊是:節(jié)目.py:import MySQLdb, Tkinterdb=MySQLdb.connect(#blahblah) ; cur=db.cursor() #cur is defined!from utilities_module import *然后,當(dāng)我試圖調(diào)用任何實(shí)用程序函數(shù)時(shí),它就會觸發(fā)前面提到的“全局名稱未定義”錯(cuò)誤。一個(gè)特別的建議是在實(shí)用程序文件中有一個(gè)“FROM程序?qū)隒UR”語句,如下所示:公用事業(yè)_module.py:from program import cur#rest of function definitions節(jié)目.py:import Tkinter, MySQLdbdb=MySQLdb.connect(#blahblah) ; cur=db.cursor() #cur is defined!from utilities_module import *但這是循環(huán)導(dǎo)入或類似的東西,而且,底線是,它也崩潰了。所以我的問題是:如何才能使主模塊中定義的“cur”對象對導(dǎo)入到其中的輔助函數(shù)可見?感謝您的時(shí)間和我最深切的歉意,如果解決方案已張貼到其他地方。我自己找不到答案,我的書里再也沒有竅門了。
導(dǎo)入模塊中全局變量的可見性
喵喵時(shí)光機(jī)
2019-08-01 02:02:59