2015-04-02 82 views
2

基本上我正在觀察某種變化的邏輯電平,然後計算持續時間有多長。由於我有許多不同的線路可供觀看,因此我開始爲每條線路創建一個功能。所以我想,爲什麼不根據觸發的線創建一個使用不同參數的函數。在Python中,如何在線程回調中傳遞參數?

def myCallBack(pin, bool, Ftimer, Etimer): 
    ## some more code here for checking bools and using timers 

GPIO.add_event_detect(pin1, GPIO.both, callback=myCallBack(pin1, bool1, Ftimer1, Etimer1), bouncetime=200) 
GPIO.add_event_detect(pin2, GPIO.both, callback=myCallBack(pin2, bool2, Ftimer2, Etimer2), bouncetime=200) 
... 

目前,我得到錯誤「類型錯誤:參數必須是可調用的」 是這種做法甚至可能嗎?我是否以正確的方式去做這件事? 任何幫助,將不勝感激。 謝謝。

回答

0

我不知道爲什麼這解決了我的問題,但它確實有效。我創建了一個類來創建對象,因爲我在每個邏輯行上執行相同的功能集。我發現這stackoverflow link並遵循相同的模式。這對我需要完成的工作很好。

2
from functools import partial 
callback=partial(myCallBack, pin1, bool1, Ftimer1, Etimer1) 

這將產生不帶參數的函數,調用時pin1bool1Ftimer1Etimer1調用myCallBack。或者,請嘗試:

callback=lambda *a: myCallBack(pin1, bool1, Ftimer1, Etimer1) 

另請參閱Python, how to pass an argument to a function pointer parameter?

+0

我仍然'TypeError:Parameter必須可調用' 我做了一些更深入的Partial,發現您可以在創建部分對象或調用它時添加參數。無論哪種方式,我仍然得到錯誤。 如果我只是調用myCallBack,它會運行該功能就好了。當我從GPIO.add_event_detect – Matt 2015-04-02 21:38:13

+0

@MattMumm中調用它時,似乎有問題您可以嘗試上面的第二種方法嗎? – matsjoyce 2015-04-03 17:32:52

+0

對不起,由於某種原因我錯過了。 剛剛嘗試過,它與您建議的第一種方法具有相同的反應。 – Matt 2015-04-06 21:12:56