8 函式 閉包

2022-04-29 12:21:09 字數 1512 閱讀 6549

​ 函式名是⼀個變數, 但它是⼀個特殊的變數, 與括號配合可以執⾏函式的變數。

1. 函式名的記憶體位址

def func():

print("呵呵")

print(func)

結果:

2. 函式名可以賦值給其他變數
def func():

print("呵呵")

print(func)

# 把函式當成⼀個變數賦值給另⼀個變數

a = func

# 函式調⽤ func()

a()

3. 函式名可以當做函式的引數
def func():

print("吃了麼")

def func2(fn):

print("我是func2")

fn()

print("我是func2")

# 把函式func當成引數傳遞給func2的引數fn.

func2(func)

4. 函式名可以作為函式的返回值
def func_1():

print("這⾥是函式1")

def func_2():

print("這⾥是函式2")

print("這⾥是函式1")

return func_2

# 執⾏函式1. 函式1返回的是函式2, 這時fn指向的就是上⾯函式2

fn = func_1()

# 執⾏上⾯返回的函式

fn()

1. 定義

​ 如果在乙個內部函式裡,對在外部作用於(但不是在全域性作用域)的變數進行引用,那麼內部函式就被認為是閉包。

​ 閉包(closure)是詞法閉包(lexical closure)的簡稱,是引用了自由變數的函式。這個被引用的自由變數將和這個函式一同存在,即使已經離開了創造它的環境也不例外。所以,閉包是由函式和與其相關的引用環境組合而成的實體。

​ 通俗的講就是:如果在乙個內部函式裡,對在外部作用域(但不是在全域性作用域)的變數進行引用,那麼內部函式就被認為是閉包(closure)。它只不過是個「內層」的函式,由乙個名字(變數)來指代,而這個名字(變數)對於「外層」包含它的函式而言,是本地變數。

​ 閉包的主要用途:實現裝飾器

2. 閉包運用

(1) 普通閉包

def func(a, b):

def line(x):

return a * x - b

return line

line = func(2, 3)

print(line(5))

(2) 修改值閉包
def func(a, b):

def line(x):

nonlocal a

a = 3

return a * x - b

return line

line = func(2, 3)

print(line(5))

Go語言之函式使用 8 閉包

閉包就是乙個函式和與其相關的引用環境組合的乙個整體 實體 package main import fmt func addupper str string func int int func main 案例分析 1 addupper會返回乙個匿名函式 func x int int2 該匿名函式引用到...

函式閉包python中的閉包

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

python函式巢狀閉包 閉包與巢狀函式

沒有區別,因為沒有閉合函式,不是真的。有closures,但這一術語指的是在外部和內部範圍中儲存變數的技術。只剩下巢狀函式。在 巢狀函式只是在另乙個函式內部定義的函式 def outer def inner 當outer 定義了乙個inner 然後也使用的名稱,則該變數名稱為閉包單元,儲存在inne...