2 回答

TA贡献1887条经验 获得超5个赞
改变这个:
if __name__ == '__main__':
Thread(target = displayNums()).start()
Thread(target = stam()).start()
对此:
if __name__ == '__main__':
Thread(target = displayNums).start()
Thread(target = stam).start()
线程目标是函数本身,而不是函数的返回值。 stam()调用函数并返回其值,但stam它是函数对象本身。创建线程时,您需要函数本身,而不是其返回值。
编辑:当你想现在运行它时调用一个函数。您可以访问它的返回值,例如x = f()将 f 的返回值赋给 x。在其他情况下,您现在不想运行函数,但您想跟踪它以便以后调用它。线程就是这种情况。您不想运行该函数,而是想告诉线程构造函数在第二个线程中运行什么函数。因此,在这种情况下,您将函数本身作为参数传递。通常这意味着没有任何括号的函数名称。
Python 将函数视为任何其他对象。在 Python 中,您可以将一个函数分配给一个变量,然后从所有意图和目的来看,该变量就是函数本身。它可以像原始函数一样被调用(带花括号),也可以传递给函数,或者其他什么。
尝试这个:
# print is a function (built-in), and I can assign it to a variable
a = print
# Nothing gets printed yet
# the variable 'a' is now the same thing as the print function
a("Hello world")
这是一个愚蠢的例子,但在许多现实世界的情况下,这非常有用。

TA贡献1784条经验 获得超8个赞
您的代码实际上是在线程之外调用线程目标。将您的代码编辑为:
if __name__ == '__main__': Thread(target = displayNums).start() Thread(target = stam).start()
添加回答
举报