如何通过变量将参数传递给函数?

时间:2019-03-05 13:24:34

标签: python python-3.x

我正在单独的线程中执行函数,并且希望通过队列传递参数。因此,函数应该理想地能够接受封装在一个变量中的所有变量

类似:

v = ('arg1', kwarg1='val1', kwarg2='val2')

def print_arg(*args, **kwargs):
    print('args:{}\nkwargs:{}'.format(args, kwargs))

print_arg(v)

有什么简单的方法可以实现这一目标吗?

谢谢

2 个答案:

答案 0 :(得分:0)

一种执行此操作的方法可能是在主线程中构建队列,并将其作为参数传递给您创建的线程:

q = queue.Queue()   
thread1 = threading.Thread(target=main_function,args(q,other_args)) 

在任一线程中,使用put方法将信息作为字符串添加到队列:

q.put(str(important_variable))

使用get方法从队列中检索此信息

important_variable = q.get()

如果传递多个变量或信息,请使用多个队列或构造放入队列的内容,以使您知道要从队列中取出的内容。

答案 1 :(得分:0)

是的,您可以将所有参数存储在单个变量中,但仍然需要将位置参数与关键字参数分开存储。没有可以同时用作序列和映射的数据结构。

这里是一种方法:

v = ['arg1'], {'kwarg1': 'val1', 'kwarg2': 'val2'}
print_arg(*v[0], **v[1])

这有点乏味且难以阅读,因此我们可以将整个内容封装在一个类中:

class ArgumentBundle:
    def __init__(self, *args, **kwargs):
        self.args = args
        self.kwargs = kwargs

    def call(self, function):
        return function(*self.args, **self.kwargs)

v = ArgumentBundle('arg1', kwarg1='val1', kwarg2='val2')
v.call(print_arg)