2012-10-24 88 views
1

我試圖做這樣的事情調用閉包內的函數:在python

import threading 
def func1(a,b): 
    def func2(): 
     t=threading.Thread(target=func3) 
     return t 
    return func2 

func2=func1(a,b) 
func2() 

我有一個限制(我使用的語言是Python與一些限制的功能)不使用線程函數的args參數,而不是我想將a和b作爲參數傳遞給func3。我如何使用閉包來做到這一點?

+0

我想你的意思是'func2()'而不是'func1()'。 –

回答

2

在沒有lambda我可能會考慮functools.partial。如果這是不允許的,你可能會這樣做:

import threading 
def func1(a,b): 
    def func2(): 
     def func4(): 
      return func3(a,b) 
     return threading.Thread(target=func4) 
    return func2 

func2=func1(a,b) 
func2() 
+0

這隻適用於我想要做的事情。 我在這裏有點困惑: 如何捕獲由語句 'threading.Thread(target = func4)' – securecoding

+0

而不是在最後一行做'func2()',你會'thread_object = func2()' – mgilson

5

您可以使用lambda:

t=threading.Thread(target=lambda: func3(a,b)) 

b將封閉舉行的的a值,甚至後func1退出。

取而代之的是拉姆達的,你可以創建一個名爲功能:

def thread_func(): 
    func3(a,b) 
t = threading.Thread(target=thread_func) 
+0

哦是的.. srry ..我的意思是func2()那裏..現在編輯 – securecoding

+0

我害怕lambda使用不允許以及..我可以用任何其他方式嗎? – securecoding

+0

@securecoding - 你可以使用'functools.partial'嗎? – mgilson