Python: arg=(myDict,) 和 arg=(myDict) 之间的区别
Python: Difference Between arg=(myDict,) and arg=(myDict)
在我的 python 代码中,我有一个 class。我想运行一个线程中的class方法。该方法以字典作为参数。
def func1(self, input_dictionary):
...
为了让这个方法在线程中 运行,我发现我需要将我的字典作为 (mydict,)
:
传递给函数
threading.Thread(target=self.func1, arg=(mydict,))
我想知道arg=(myDict,)
和arg=(myDict)
的区别。 mydict
之后的 ,
对元组有什么作用?
运行 以下将导致 python 抱怨 self.func1
需要 2 个位置参数,而我输入了错误的输入数。
threading.Thread(target=self.func1, arg=(mydict)) # or the next one
threading.Thread(target=self.func1, arg=mydict)
有人可以解释一下吗?
答案是末尾的','使圆括号定义了一个元组。没有逗号,它只是多余的括号。
关于 9 个参数而不是 2 个参数,python 正在做的事情如下:它需要一个参数元组来解包,因此它尝试解包它传递的对象。
原来 my_dict 有 9 个值,所以它们被解包为参数 - 在函数中给出 9 个参数。
括号在 Python 中创建元组是一种常见的误解。
通过 arg=(myDict)
等同于通过 arg=myDict
,类似于 (1) + (1)
等同于数学中的 1 + 1
。
实际上是逗号让 Python 解析器决定您实际上是在构建一个元组。这意味着,要创建一个包含单个元素的元组,您需要添加一个有点笨拙的尾随逗号。您可以在 Python REPL:
中自行检查此行为
>>> (1)
1
>>> type((1))
<class 'int'>
>>> (1,)
(1,)
>>> type((1,))
<class 'tuple'>
所以在你的情况下,你需要传递 arg=(myDict,)
以确保你的参数作为元组传递。
在我的 python 代码中,我有一个 class。我想运行一个线程中的class方法。该方法以字典作为参数。
def func1(self, input_dictionary):
...
为了让这个方法在线程中 运行,我发现我需要将我的字典作为 (mydict,)
:
threading.Thread(target=self.func1, arg=(mydict,))
我想知道arg=(myDict,)
和arg=(myDict)
的区别。 mydict
之后的 ,
对元组有什么作用?
运行 以下将导致 python 抱怨 self.func1
需要 2 个位置参数,而我输入了错误的输入数。
threading.Thread(target=self.func1, arg=(mydict)) # or the next one
threading.Thread(target=self.func1, arg=mydict)
有人可以解释一下吗?
答案是末尾的','使圆括号定义了一个元组。没有逗号,它只是多余的括号。
关于 9 个参数而不是 2 个参数,python 正在做的事情如下:它需要一个参数元组来解包,因此它尝试解包它传递的对象。
原来 my_dict 有 9 个值,所以它们被解包为参数 - 在函数中给出 9 个参数。
括号在 Python 中创建元组是一种常见的误解。
通过 arg=(myDict)
等同于通过 arg=myDict
,类似于 (1) + (1)
等同于数学中的 1 + 1
。
实际上是逗号让 Python 解析器决定您实际上是在构建一个元组。这意味着,要创建一个包含单个元素的元组,您需要添加一个有点笨拙的尾随逗号。您可以在 Python REPL:
中自行检查此行为>>> (1)
1
>>> type((1))
<class 'int'>
>>> (1,)
(1,)
>>> type((1,))
<class 'tuple'>
所以在你的情况下,你需要传递 arg=(myDict,)
以确保你的参数作为元组传递。