您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Python中的回調函數怎么使用”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Python中的回調函數怎么使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
主要是介紹python 的回調函數callback。
當程序運行是,一般情況下,應用程序會時常通過API調用庫里所預先備好的函數。但是有些庫函數卻要求應用先傳給它一個函數,好在合適的時候調用,以完成目標任務。這個被傳入的、后又被調用的函數就稱為回調函數(callback function)。
例如:
有一家旅館提供叫醒服務,但是要求旅客自己決定叫醒的方法。可以是打客房電話,也可以是派服務員去敲門,睡得死怕耽誤事的,還可以要求往自己頭上澆盆水。這里,“叫醒”這個行為是旅館提供的,相當于庫函數,但是叫醒的方式是由旅客決定并告訴旅館的,也就是回調函數。而旅客告訴旅館怎么叫醒自己的動作,也就是把回調函數傳入庫函數的動作,稱為登記回調函數(to register a callback function)
可以看到,回調函數通常和應用處于同一抽象層(因為傳入什么樣的回調函數是在應用級別決定的)。而回調就成了一個高層調用底層,底層再回過頭來調用高層的過程。(我認為)這應該是回調最早的應用之處,也是其得名如此的原因。
回調機制提供了非常大的靈活性。我們把圖中的庫函數改稱為中間函數了,這是因為回調并不僅僅用在應用和庫之間。任何時候,只要想獲得類似于上面情況的靈活性,都可以利用回調。有的同學可定想回調似乎只是函數間的調用,可以發現兩者之間的一個關鍵的不同:
在回調中,我們利用某種方式,把回調函數像參數一樣傳入中間函數。可以這么理解,在傳入一個回調函數之前,中間函數是不完整的。換句話說,程序可以在運行時,通過登記不同的回調函數,來決定、改變中間函數的行為。這就比簡單的函數調用要靈活太多了。
#回調函數1 #生成一個2k形式的偶數 def double(x): return x * 2 #回調函數2 #生成一個4k形式的偶數 def quadruple(x): return x * 4 callback_demo.py` from even import * #中間函數 #接受一個生成偶數的函數作為參數 #返回一個奇數 def getOddNumber(k, getEvenNumber): return 1 + getEvenNumber(k) #起始函數,這里是程序的主函數 def main(): k = 1 #當需要生成一個2k+1形式的奇數時 i = getOddNumber(k, double) print(i) #當需要一個4k+1形式的奇數時 i = getOddNumber(k, quadruple) print(i) #當需要一個8k+1形式的奇數時 i = getOddNumber(k, lambda x: x * 8) print(i) if __name__ == "__main__": main()
def apply_ascyn(func, args, callback): """ func 函數的是處理的函數 args 表示的參數 callback 表示的函數處理完成后的 該執行的動作 """ result = func(*args) callback(result) def add(x, y): return x + y def print_result(result): print(result) apply_ascyn(add, (2, 3), callback=print_result)
這里print_result只能接收一個result的參數,不能傳入其他信息。當想讓回調函數訪問其他變量或者特定環境的變量值的時候會遇到問題。
def appy_async(func, args, *, callback): result = func(*args) #異步執行的函數 同時將執行后返回到這個早從這個函數跳出去 callback(result) def add(x ,y): return x + y class ResultHandler(object): def __init__(self): self.sequence = 0 def handle(self, result): self.sequence += 1 print("[{}] Got: {}".format(self.sequence, result)) resultHandler = ResultHandler() appy_async(add, (2,3), callback=resultHandler.handle)
def apply_async(func, args, *, callback): result = func(*args) callback(result) def add(x ,y): return x + y def make_handler(): sequence = 0 def handler(result): nonlocal sequence sequence += 1 print("[{}] Got:{}".format(sequence, result)) return handler handler = make_handler() apply_async(add, (2,3), callback=handler)
def apply_async(func, args, *, callback): result = func(*args) callback(result) def add(x, y): return x + y def make_handler(): sequence = 0 while True: result = yield sequence += 1 print("[{}] Got:{}".format(sequence, result)) handle = make_handler() next(handle) apply_async(add, (2,3), callback=handle.send)
讀到這里,這篇“Python中的回調函數怎么使用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。