将元组作为参数通过回调函数传递给目标函数

为了增加回调函数的可读性,想将目标函数的参数作为元组进行整体传送。

最近看到多线程处理中 treading.Thread()  就是很好的例子,实现效果如下:

thd = threading.Thread(target=fun, args=(lst, args))

可惜没有源码,不知道如何实现的。于是自己摸索找到如下实现方式。代码如下:

def callback(fun, args=(), **kwargs):
    """ 回调函数
    fun: 被回调函数名称
    args: 回调函数的参数
    kwargs: 其他参数
    """
    a = []
    if len(args) != len(fun.__code__.co_varnames):
        raise Exception("参数数量不一致")
    cmd = "fun("
    for i in range(len(fun.__code__.co_varnames)):
        item = "args[%d]" % i
        a.append(item)
    cmd = cmd + ', '.join(a) + ')'
    return eval(cmd)


def add(x, y):
    return x + y


a = callback(fun=add, args=(2, 4))
print(a)

不知道还有没有其他更好的实现方式。

 

posted on 2020-12-23 22:14  Jeckun  阅读(93)  评论(0)    收藏  举报