[英]Dealing with undefined global in module (python)
所以我有一些像這樣的python代碼
import mymodule
sum_global= mymodule.populateGlobalList("bigdict.txt")
等等...... mymodule 中的代碼包括方法
def populateGlobalList(thefile):
#do the stuff
到目前為止一切正常。
但是在mymodule 的其他地方我有一個方法說
def usefulFunction(arg1, arg2):
#lotsofstuff
if arg1 not in sum_global:
#add to list
所以解釋器在 undefined sum_global上跳閘,這是有道理的。 現在有用的函數可以將sum_global作為參數,至少在理論上是這樣。 但sum_global旨在成為一個英語詞典,廣泛用於檢查遇到的單詞是否是英語單詞(或至少拼寫正確)。 由於這種情況經常發生,因此將其本地化會帶來不必要的尷尬。
另一方面,只是在模塊中聲明一個全局sum_global (本質上是為了欺騙解釋器),目的是在導入mymodule的程序中填充這個空容器,感覺完全錯誤。
這種情況下的聲音設計是什么?
每個模塊都有自己的全局命名空間。 您將sum_global
添加到錯誤的模塊中,它不在mymodule
。
要么將sum_global
放在mymodule
要么將其作為參數傳遞給需要它的函數。
聽起來好像您想推遲計算sum_global
值,直到您有了文件名; 你可以在這里populateGlobalList()
設置全局; 這一切都在mymodule
:
sum_global = None
def populateGlobalList(filename):
global sum_global
if sum_global is None:
sum_global = "result of your population work"
此函數不返回數據,它在模塊中設置全局變量(前提是尚未設置)。
但是,您應該盡量避免創建這樣的全局變量。 由於您的模塊的用戶必須提供文件名,如果用戶代碼跟蹤populateGlobalList()
調用的結果並將其顯式傳遞給有用的函數()`調用,則效果會更好:
import mymodule
sum_global = mymodule.populateGlobalList("bigdict.txt")
result = mymodule.usefulFunction(arg1, arg2, sum_global)
並重組usefulFunction()
以需要這樣的參數。
下一步是讓您的模塊為此使用一個類:
class MyClass(object):
def __init__(self, filename):
self._populate()
def _populate(self):
self.sum = "result of your population work"
def useful_function(self, arg1, arg2):
# do work with self.sum
然后在任何地方使用該類:
interesting_object = mymodule.MyClass('bigdict.txt')
result = interesting_object.useful_function(arg1, arg2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.