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()
添加回答
舉報