如何将元组和变量作为args传递

我需要将一个大的元组和一个变量传递给线程任务作为参数。


excelbtn_text.set("Outputting...")

excelClass = excelCL()

excel_thread = threading.Thread(target=excelClass.excelOut, args=(dcf_data_tuple, excelbtn_text))

excel_thread.daemon = True

excel_thread.start()

但是,我收到一个错误TypeError: excelOut() missing 242 required positional arguments。无论如何,我可以克服这个问题吗?


当我仅将元组作为参数传递时,从未发生过该错误。


幕布斯7119047
浏览 222回答 2
2回答

慕侠2389804

首先,要传递一个元组和另一个值,您可以只创建一个具有两个成员的元组-大元组和另一个值。正像您在做的那样:args=(dcf_data_tuple, excelbtn_text)但是,您传递的参数必须与方法的函数定义匹配。除非将2个值的有效元组用作方法的参数,否则该方法将不起作用。为了解决您的困惑,首先,这并不意味着您认为它会做什么:args=(dcf_data_tuple)括号不会创建元组;逗号创建一个元组。换句话说,(2)不是包含数字的1元素元组2,而仅仅是number 2。并且(dct_data_tuple)不是包含该元组的1元素元组dct_data_tuple,它只是dct_data_tuple。因此,函数的定义excelClass.excelOut大概不是将单个巨型元组作为参数,而是将数百个单独的参数作为参数。这是一个奇怪的设计,但实际上并不是非法的。这与您得到的异常相匹配:当您向其传递2个参数(第一个参数是一个巨大的元组)而不是数百个参数时,它抱怨您缺少242个位置参数:TypeError:excelOut()缺少242个必需的位置参数解决此问题的最简单方法是提供excelOut与您要传递的内容相匹配的合理签名:def excelOut(self, data_tuple, text):    # do stuff here如果由于某种原因无法更改其定义,则必须查看定义是什么,然后尝试匹配它。例如,如果看起来像这样:def excelOut(self, data0, data1, … hundreds more, …, text):…然后您必须这样称呼它:args=dcf_data_tuple + (excelbtn_text,)请注意最后的逗号。那意味着(excelbtn_text,)是一个1元素的元组。然后,我们将巨型元组添加到1元素元组中,并返回一个巨型加1元素元组,该元组现在与方法的参数匹配。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python