2016-03-17 26 views
0

我有以下代碼:你可以執行一行作爲python線程的目標嗎?

errorThread = Thread(
    target=tkMessageBox.showerror("Error", b[-1][z:]), 
    args=()) 
errorThread.daemon = True 
errorThread.start() 

我知道我可以做其他的功能和傳遞參數,但出於好奇,你可以執行的Python代碼一行作爲目標的Python的主題?

+0

你爲什麼不試試? :) – jDo

+0

我確實嘗試過,但沒有奏效,但我不知道是否有某種方法需要格式化。目前它是它自己的一行功能。 – user3000724

+0

好的。這個'errorThread = Thread(target = print,args =(「howdy」))'技術上可以在python3中工作(沒有語法錯誤等),這是有道理的,因爲它只是另一個函數。唯一的區別是它不是由用戶編寫的(或者至少這是我的理解,但我可能是錯的)。無論如何,我還會爲@Kevin建議 – jDo

回答

2

您可以使用lambda expression作爲您的目標。畢竟,lambda表達式適用於:創建單個表達式可調用對象,而不必在函數定義上花費整整一行。

errorThread = Thread(target=lambda: tkMessageBox.showerror("Error", b[-1][z:])) 
+0

的lambda表達式,我不知道lambda,所以是的,這正是我想要的。謝謝! – user3000724

2

您可以在args關鍵字參數中傳遞這些參數。像這樣:

errorThread = Thread(
    target=tkMessageBox.showerror, 
    args=("Error", b[-1][z:])) 
errorThread.daemon = True 
errorThread.start() 
+0

現在我感到很傻甚至沒有意識到這個解決方案。絕對提供了一些乾淨的代碼,所以我會使用這個,但另一個解決方案實際上回答了原來的問題,以防其他用戶在這裏遇到幾十年的問題(加上我在其他SO問題/答案中看到過lambda,但從未使用它們我)。 – user3000724

相關問題