Python线程“ TypeError:_testmethod()接受2个位置参数,但给出了12个”

时间:2019-06-24 07:16:07

标签: python-3.x multithreading arguments typeerror

我正在为类方法运行线程,并被必要的语法所迷惑。

运行代码示例:

from threading import Thread

class TestClass:
    def _testmethod(self, argument):
        print(argument)

    def __init__(self, arg):
        self.T = Thread(target=self._testmethod, args=(arg,))
        self.T.start()        

C = TestClass("hello world")

仅当我在参数列表中输入冒号时,此方法才能按预期工作:“ args =(arg **,**))”

如果我像这样把结肠放在外面:

self.T = Thread(target=self._testmethod, args=(arg))

我收到TypeError:

TypeError: _testmethod() takes 2 positional arguments but 12 were given

有人可以告诉我,这是怎么回事吗?

1 个答案:

答案 0 :(得分:0)

args=(arg,)意味着args得到一个元组。 (arg,)中的逗号告诉Python解释器,括号用于创建单个元素元组。如果不使用逗号,则只需将值括起来即可。根据您传递参数的方式,它可以扩展为多个(不包装在元组中)。

请参阅文档5.3. Tuples and Sequences。它说:

  

一个特殊的问题是包含0或1项的元组的构造:语法有一些额外的怪癖来容纳这些项。空元组由一对空括号组成;一个带有一个项目的元组是通过在值后面加上逗号来构造的(仅将一个值括在括号中是不够的)。丑陋,但有效。