閉包函式 鹹魚Chen

2022-09-23 12:57:10 字數 1794 閱讀 4671

目錄

什麼是閉包?(掌握)

兩種為函式傳參的方式

閉包函式的應用(掌握)

回顧:函式物件:可以將定義在函式內的函式返回到全域性使用,從而打破函式的層級限制。

命名空間與作用域:作用域關係在函式定義階段時就已經固定死了,與呼叫位置無關,即在任意位置呼叫函式都需要跑到定義函式時找到作用域關係。

def f1():

x = 1

def inner():

print(x)

return inner

func = f1()

x = 2

def f2():

x = 3

func()

f2()

1閉包:閉是封閉(函式內部函式),包是包含(該內部函式對外部作用域而非全域性作用域的變數的引用)。閉包指的是:函式內部函式對外部作用域而非全域性作用域的引用。

提示:之前我們都是通過引數將外部的值傳給函式,閉包提供了另外一種思路,包起來嘍,包起呦,包起來哇。

def outter():

x = 1

def inner():

print(x)

return inner

f = outter()

def f2():

x = 2

f()f2()

1為函式傳參的方式一:使用引數的形式

def func(x):

print(x)

func(1)

func(1)

func(1)111

為函式傳參的方式二:包給函式

def outter(x):

x = 1

def inner():

print(x)

return inner

f = outter(1)

f()f()

f()# 檢視閉包的元素

print(f"f.__closure__[0].cell_contents: ")

111f.__closure__[0].cell_contents: 1

閉包的意義:返回的函式物件,不僅僅是乙個函式物件,在該函式外還包裹了一層作用域,這使得,該函式無論在何處呼叫,優先使用自己外層包裹的作用域。

應用領域:延遲計算(原來我們是傳參,現在我們是包起來)、爬蟲領域。

import requests

def get(url):

response = requests.get(url)

print(f"done: ")

get('')

get('')

get('')

get('')

get('')

get('')

done:

done:

done:

done:

done:

done:

上面的方式是極其複雜的,我們如果使用預設引數也只能解決乙個**,因此我們可以考慮使用閉包的方式。

命名空間與作用域 鹹魚Chen

目錄 命名空間 掌握 內建命名空間 全域性命名空間 區域性命名空間 載入順序 查詢順序 作用域 掌握 全域性作用域 區域性作用域 注意點函式物件 作用域應用 補充知識點 了解 global關鍵字 nonlocal關鍵字 注意點函式內部的函式只能在函式內部呼叫,不能在函式外部呼叫,通過接下來的學習你將...

tday02 上節課複習 鹹魚Chen

人與計算機交流的介質 寫出乙個乙個檔案,然後乙個檔案的集合就是乙個程式 在計算機上寫乙個程式實現某種功能,取代勞動力 我們人類最重要的組成是大腦,大腦中有乙個控制器,還有乙個運算器 鍵盤 滑鼠 遊戲手柄 顯示屏 印表機 音響 多個cpu,多個大腦,然後在一瞬間同時完成多件事 計算機只認識0和1的,6...

函式閉包python中的閉包

本文純屬個人見解,是對前面學習的總結,如有描述不正確的地方還請高手指正 單簡說,閉包就是根據不同的置配息信到得不同的結果 再來看看專業的解釋 閉包 closure 是詞法閉包 lexical closure 的簡稱,是引用了由自變數的函式。這個被引用的由自變數將和這個函式一起存在,即使已離開了造創它...