Python多线程threading.Thread的args参数末尾为什么需要加逗号?
问题解答
这本质是Python单元素元组的语法规则,和threading.Thread本身的设计没有关系。
- 首先要明确Python里括号的歧义性:
你写(thread_number)的时候,Python不会把它识别成元组,只会把括号当成普通的优先级运算符,最终解析出来的就是thread_number本身的类型,比如示例里传的是整数,那它就是个int类型的变量,不是元组。
只有在括号里的元素末尾加个逗号,写成(thread_number,),Python才会把它识别为「只包含一个元素的元组」,类型为tuple。
你可以跑两行简单的代码验证这个规则:print(type((1))) # 输出 <class 'int'> print(type((1,))) # 输出 <class 'tuple'> - 再看
threading.Thread的参数要求:
它的args参数要求必须传入一个可迭代的序列,序列里的元素会按顺序传递给target指向的函数作为位置参数。
如果你不加逗号直接写args=(thread_number),传进去的就是个整数,整数不可迭代,线程启动的时候会直接抛类型错误。只有写成单元素元组的格式,才符合参数要求,能正常把thread_number的值传给access函数的入参。
你示例里的写法完全符合Python的语法规则和threading模块的参数要求,所以是合法的。
内容的提问来源于stack exchange,提问作者Abhishek Pujari
相关产品推荐
相关产品推荐

