我正在为类方法运行线程,并被必要的语法所迷惑。
运行代码示例:
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
有人可以告诉我,这是怎么回事吗?
答案 0 :(得分:0)
args=(arg,)
意味着args
得到一个元组。 (arg,)
中的逗号告诉Python解释器,括号用于创建单个元素元组。如果不使用逗号,则只需将值括起来即可。根据您传递参数的方式,它可以扩展为多个(不包装在元组中)。
请参阅文档5.3. Tuples and Sequences。它说:
一个特殊的问题是包含0或1项的元组的构造:语法有一些额外的怪癖来容纳这些项。空元组由一对空括号组成;一个带有一个项目的元组是通过在值后面加上逗号来构造的(仅将一个值括在括号中是不够的)。丑陋,但有效。