Python中的內部函式和閉包

2021-10-25 20:15:29 字數 1599 閱讀 5306

python支援函式內嵌

>>> def fun1():

print('fun1()正在被呼叫...')

def fun2():

print('fun2()正在被呼叫...')

fun2()

>>> fun1()

fun1()正在被呼叫...

fun2()正在被呼叫...

>>> fun2()

traceback (most recent call last):

file "", line 1, in fun2()

nameerror: name 'fun2' is not defined

我們可以看到,fun2()智慧型通過fun1()來進行呼叫,而不能直接呼叫fun2()

閉包

>>> def funx(x):

def funy(y):

return x * y

return funy

>>> i = funx(8)

>>> i

.funy at 0x000001a770a2d8c8>

>>> type(i)

>>> i(5)

40>>> funx(8)(5)

40

或者直接用funx(8)(5)把x賦值為8,把y賦值為5

>>> def fun1():

x = 5

def fun2():

x *=x

return x

return fun2()

>>> fun1()

traceback (most recent call last):

file "", line 1, in fun1()

file "", line 6, in fun1

return fun2()

file "", line 4, in fun2

x *=x

unboundlocalerror: local variable 'x' referenced before assignment

在內部函式fun2()中,想利用fun1()中的x的值,最後發現系統報錯,因為fun2()中的x對於fun1()來說是區域性變數。

那麼怎麼解決這個問題呢?

>>> def fun1():

x = [5]

def fun2():

x[0] *= x[0]

return x[0]

return fun2()

>>> fun1()

25

這是因為列表不是儲存在棧中的。

那麼還可以怎麼解決呢?

>>> def fun1():

x = 5

def fun2():

nonlocal x

x *=x

return x

return fun2()

>>> fun1()

25

我們可以看到,可以用nonlocal x 來規定x不是區域性變數,那麼也可以實現上面的要求

Python 中的內部函式 閉包

最近在學習 python 的過程中遇到了閉包這一概念,現總結如下 咱們看看下面一段 def greetingconfig prefix def greeting postfix print prefix,postfix return greeting m greetingconfig good mo...

函式閉包python中的閉包

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

python中函式閉包

閉包 乙個函式巢狀另乙個函式,外面的函式簡稱為外函式,裡面的為內函式,外函式返回內函式。與普通函式不同的是,普通函式呼叫完後,函式中的區域性變數消失,返回記憶體,而閉包外函式呼叫後,外函式的區域性變數沒有消失,而是繼續留給內函式使用。1,普通函式 deffn a 2return a fn print...