[英]How to pass parameters to function via variable?
我在單獨的線程中執行函數,並希望通過隊列傳遞參數。 因此,函數應該理想地能夠接受封裝在一個變量中的所有變量
就像是:
v = ('arg1', kwarg1='val1', kwarg2='val2')
def print_arg(*args, **kwargs):
print('args:{}\nkwargs:{}'.format(args, kwargs))
print_arg(v)
有什么簡單的方法可以實現這一目標嗎?
謝謝
一種執行此操作的方法可能是在主線程中構建隊列,並將其作為參數傳遞給您創建的線程:
q = queue.Queue()
thread1 = threading.Thread(target=main_function,args(q,other_args))
在任一線程中,使用put方法將信息作為字符串添加到隊列中:
q.put(str(important_variable))
使用get方法從隊列中檢索此信息
important_variable = q.get()
如果傳遞多個變量或信息,請使用多個隊列或構造放入隊列中的內容,以使您知道要從隊列中取出的內容。
是的,您可以將所有參數存儲在單個變量中,但仍然需要將位置參數與關鍵字參數分開存儲。 沒有可以同時用作序列和映射的數據結構。
這是一種實現方法:
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.