我正在編寫一個使用遺傳技術來演化方程的程序。 我希望能夠將函數'mainfunc'提交給並行Python'提交'功能。 函數'mainfunc'調用Utility類中定義的兩個或三個方法。 他們實例化其他類並調用各種方法。 我想我想要的是它在一個NAMESPACE中。 所以我實例化了函數mainfunc中的一些類(也許它應該是全部)。 我稱之爲Utility方法'generate()'。如果我們要遵循它的執行鏈 它將涉及代碼中的所有類和方法。構建一個程序。 Python中的類和函數
現在,方程存儲在一棵樹中。每次生成樹,突變或交叉時,都需要給節點一個新的密鑰,以便可以從樹的字典屬性中訪問它們。類'KeySeq'生成這些密鑰。
在並行Python中,我將發送多個'mainfunc'實例給PP的'submit'函數。每個人都必須能夠訪問'KeySeq'。如果他們都訪問相同的KeySeq實例,以便返回的樹上沒有任何節點具有相同的密鑰,但如果有必要,我可以解決這個問題。
所以:我的問題是關於將所有東西塞進mainfunc。 謝謝 (編輯)如果我沒有在mainfunc中包含所有東西,我必須通過在各個地方傳遞各種論證來嘗試告訴PP相關函數等。我試圖避免這種情況。
(後期編輯)如果ks.next()被稱爲「的內部產生()函數,則返回錯誤‘NameError:全球名‘KS’沒有定義’
class KeySeq:
"Iterator to produce sequential \
integers for keys in dict"
def __init__(self, data = 0):
self.data = data
def __iter__(self):
return self
def next(self):
self.data = self.data + 1
return self.data
class One:
'some code'
class Two:
'some code'
class Three:
'some code'
class Utilities:
def generate(x):
'___________'
def obfiscate(y):
'___________'
def ruminate(z):
'__________'
def mainfunc(z):
ks = KeySeq()
one = One()
two = Two()
three = Three()
utilities = Utilities()
list_of_interest = utilities.generate(5)
return list_of_interest
result = mainfunc(params)
我試着插入你的'默認參數技巧'。 我在'utilities.generate()方法中得到了一個錯誤: a = key 「NameError:全局名稱'key'未定義」 我確定'mainfunc(ks = KeySeq())'參數。 現在我試圖讓這個工作不參考PP。 但是,我會研究你的消息的後半部分。在引入PP之前,我會參考callback.py。 – 2009-10-14 17:09:09
我也嘗試了第二種方法建議,'更明確'。 它在同一個'utilities.generate()方法中產生了相同的錯誤。 – 2009-10-14 19:23:52
聽起來好像你錯誤地理解'key'在'mainfunc'函數之外是可見的。它不會被'Utilities.generate()'使用,除非你做了一些事情使它成爲一個'generate'函數的參數,或者將它傳遞給構造函數,或者在'實例化它之後的Utilities對象。或者使其成爲模塊級變量並使用'global'引用它。有幾十種方法可以做到這一點,但你必須使用其中之一。 – 2009-10-15 06:34:12