2017-02-28 25 views
0

我想知道這段代碼在我們沒有任何printScore函數的引用時是如何工作的,但我們將它作爲參數傳遞給processGame函數。是否引用了在Python中自動創建的回調函數?

import time 
def printScore(score): 
    print("The score is {}".format(score)) 

def processGame(score,callback): 
    time.sleep(3) 
    callback(5) 

processGame(5,printScore) 
+0

你是什麼意思「我們沒有對回調的引用功能?」是的,它就在那裏:'printScore'。 –

+1

'def printScore(score):'是一個可執行語句,它在當前範圍內創建一個名爲'printScore'的引用。 –

+0

我的意思是,我們沒有做任何事情,比如printScoreObject = printScore()或其他東西,但我們將printScore(它是函數的名稱而不是對象)傳遞給processGame函數。我很困惑。 – srkmish

回答

1

這裏processGame被調用以參數(5,printScore).Python創建第二參考稱爲「回調」,在本地函數namespace.Therefore函數對象現在得分具有價值5和回調指printScore 。在body printScore中,由參數5的callback()調用.P

1

Python中的函數是第一類對象。函數對象和保存對其的引用的變量由def語句創建。沒有必要爲功能「創建參考」,它的名稱已經是一個參考。

您可以在Python語言參考的Data model一章中瞭解Python中不同類型對象的更多信息。在其第1段括號中的評論是你的問題很重要:

對象是Python的抽象數據。 Python程序中的所有數據都由對象或對象之間的關係來表示。 (在某種意義上,並在符合一個的馮·諾依曼的模型「所存儲的程序的計算機,」代碼也由對象表示。)

語句「代碼也由對象表示」正在談論的功能。 (它可能也指代碼對象,但通常不需要直接與它們交互,因爲它們被封裝在函數對象中。)

相關問題