簡體   English   中英

如何通過變量將參數傳遞給函數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM