在python中调用闭包内的函数

时间:2012-10-24 12:16:39

标签: python

我正在尝试做这样的事情:

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

func2=func1(a,b)
func2()

我有一个限制(我使用的语言是带有一些限制函数的python)不使用Thread函数的args参数,而是我想将a和b作为参数传递给func3。如何使用闭包来做到这一点?

2 个答案:

答案 0 :(得分:5)

您可以使用lambda:

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

即使在a退出后,bfunc1的值也会保留在闭包中。

您可以创建一个命名函数,而不是lambda:

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

答案 1 :(得分: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()