2013-02-06 80 views
0

我正在處理一個項目,在該項目中,我正在批量生成可導入到工業觸摸屏的IDE中的XML文件。具有依賴關係的函數作爲參數傳遞

每個XML文件都代表一個屏幕,大多數屏幕都需要相同的功能,處理它們的過程是一樣的,除了每個屏幕類型都具有唯一的配置功能。

我使用ScreenType類來保存特定於屏幕類型的屬性,因此我決定爲每種類型編寫一個唯一的配置,並將其作爲參數傳遞給此類的__init__()。這樣,當我根據需要傳遞ScreenType時,它的配置功能將保持捆綁狀態,並可在需要時使用。

但我不知道如果我的配置函數本身具有依賴性會發生什麼。例如:

def configure_inputdiag(a, b, c): 
    numerical_formatting = get_numerics(a) 
    # ... 
    return configured_object 

然後,當談到時間創造的ScreenType

myscreentype = ScreenType(foo, man, shoe, configure_inputdiag) 

get_numerics一個實例是模塊範圍的功能,但myscreentype可以(而且確實)獲得其他模塊中傳遞。

這是否會造成依賴關係的問題?我試圖自己測試它,但是當我將一個函數作爲參數傳遞時,似乎我沒有對背後發生的基本瞭解。我不想對發生的事情得出錯誤的結論。

我試過的東西:谷歌搜索,搜索所以,我沒有找到任何專門針對Python的東西。

在此先感謝。

回答

2

沒有問題。

函數configure_inputdiag將在其定義的上下文中始終引用get_numerics。所以,即使你從其他一些對get_numerics一無所知的模塊中調用configure_inputdiag,它也能正常工作。

將函數作爲參數傳遞會產生對該函數的引用。通過該引用,您可以調用函數,就好像您已經通過名稱調用函數一樣,而不必知道名稱(或來自它的模塊)。該參考在程序的整個生命週期內都是有效的,並且將始終引用相同的功能。如果存儲函數引用,則它基本上會變成同一個函數的不同名稱。

2

什麼你正在嘗試做的作品Python中一個很自然的形式 -

在上面的exampe,你不需要有名字空間(模塊)的進口「get_numerics」功能,其中「 configure_inputdiag」是 - 你只是把它作爲一個正常的參數(比如,把它稱爲 「功能」),你在這個例子中會像:

模塊A:

def get_numerics(parm): 
    ... 

input diag = module_B.configure_inputdiag(get_numerics, a) 

模塊B:

def configure_inputdiag(function, parm): 
    result = function(parm) 

哦 - 我看到你的疑問,我是另一種方式 - 無論如何,沒有問題 - 在Python中,函數是第一類對象,像int和字符串一樣,可以作爲參數傳遞給其他函數在其他模塊中,如你所願。我認爲上面的例子澄清了這一點。

2

get_numerics已解決在函數體的範圍內,所以它也不需要在調用者的範圍內。