閉包函數實際上是 名稱空間與做用域, 函數嵌套, 函數對象的中和運用python
'總結一句話來講' : 定義在函數內部的函數, 而且該函數包含對外部函數做用域中名字的引用,該函數就稱爲閉包函數 def outter(): name='egon' def inner(): print('my name is %s' %name) return inner #注意不能加括號 f=outter() #f=inner
🎅定義階段已經規定死了到'outter'下面的"x"去拿 def outter(): x=2 def inner(): # x=1 print('from inner',x) return inner 🎅在全局裏面定義也無效 f=outter() # f=inner print(f) x=11111111111111111 f() # 2 🎅把它裝進一個函數,在函數裏面再定義也是無效的 def foo(): x=111111111111111111 f() foo() # 2
import requests 🎅將"url"以參數的形式傳入(也是最經常使用) def get(url): response=requests.get(url)下載 if response.status_code == 200: print(response.text) get('https://www.baidu.com') get('https://www.python.org')
🎅這是個獲取網絡源碼的功能 import requests 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()
若是難以理解,就來個精簡版網絡
def outter(x): def wrapper(): print(x) #按照查找的優先級去查找"x" return wrapper #吐出了函數"wrapper"的內存地址 f = outter(10) #這裏返回的值就是函數"wrapper"的內存地址,賦值給"f",加括號就調用 f() #10