目标函数中省略的括号

时间:2018-05-15 02:19:05

标签: python

在Python中,调用名为check_values的函数的线程创建如下:

checking_thread = threading.Thread(target=check_values)

我的问题是为什么check_values省略了括号?

如果包含它们会发生什么?

1 个答案:

答案 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,))