在Python中,调用名为check_values
的函数的线程创建如下:
checking_thread = threading.Thread(target=check_values)
我的问题是为什么check_values
省略了括号?
如果包含它们会发生什么?
答案 0 :(得分:1)
Python中的函数是第一类对象。它们可以作为参数传递给函数,分配给变量,或者通过"调用"他们。调用函数的语法是引用函数名称并立即用括号括起来。可以通过在括号之间列出参数来将参数传递给函数。例如:
def check_values(x=0):
print(x)
>>> check_values
<function check_values at 0x7fae489c7ea0>
>>> type(check_values)
<class 'function'>
>>> check_values()
0
>>> check_values(10)
10
>>> print(check_values)
<function check_values at 0x7fae488df400>
因此check_values
是对函数对象的引用,您可以通过键入其名称来查看它是一个对象。它可以通过使用括号来调用,在这种情况下使用可选参数。最后,您可以看到函数作为参数传递给print()
函数。
所以回答你的问题:
checking_thread = threading.Thread(target=check_values)
这会将名为check_values
的函数的引用传递给target
函数的threading.Thread
参数,而不需要调用函数check_values
。
如果你想让threading.Thread
用参数调用函数,那么你需要单独传递它们,例如。
checking_thread = threading.Thread(target=check_values, args=(100,))