python閉包函式
阿新 • • 發佈:2020-09-14
閉包函式
閉包函式:定義在函式內部的函式,並且該函式包含對外部函式作用域中名字的引用,該函式就稱為閉包函式。
注意:該函式的作用域在定義階段就定義死了,與呼叫位置無關
閉包函式是 函式巢狀、函式物件、名稱空間與作用域 結合體。
函式作用域:
build_in :系統固定模組裡的變數 global:全域性變數,模組級別定義的變數 enclosing 巢狀的父級函式的區域性作用域,即包含此函式的上級函式 的區域性作用域,但不是全域性的 local :區域性作用域,及函式中定義的變數 優先順序:l e g b 從內往外#爬蟲:模擬訪問百度 import requests def get(url): response = requests.get(url) if response.status_code == 200: print(response.text) get('https://www.baidu.com/') get('https://www.baidu.com/') get('https://www.baidu.com/') #問題:每次訪問百度,都要呼叫一次,填一次地址 # 解決辦法:用閉包函式 def outter(): url = 'https://www.baidu.com/' #問題:把地址定死了, def get(): response = requests.get(url) if response.status_code == 200: print(response.text) return get baidu = outter() #baidu --->get baidu() # 改進: def outter(url): #裝飾器這裡是傳遞的函式名 def get(): #這裡接收的是函式引數 response = requests.get(url) if response.status_code == 200: print(response.text) return get baidu = outter('https://www.baidu.com/') #baidu --->get taobao = outter('https://www.taobao.com/') #taobao --->get baidu() #專門調百度 taobao() #專門調淘寶