最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解python函數(shù)的閉包問題(內(nèi)部函數(shù)與外部函數(shù)詳述)

 更新時(shí)間:2019年05月17日 08:35:21   作者:AngelovLee  
這篇文章主要介紹了python函數(shù)的閉包問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

python函數(shù)的閉包問題(內(nèi)嵌函數(shù))

>>> def func1():
...   print ('func1 running...')
...   def func2():
...       print ('func2 running...')
...   func2()
... 
>>> func1()
func1 running...
func2 running...

內(nèi)部函數(shù)func2作用域都在外部函數(shù)func1作用域之內(nèi)
如果試圖在外部函數(shù)的外部調(diào)用內(nèi)部函數(shù)將會(huì)報(bào)錯(cuò)

>>> func2()
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
NameError: name 'func2' is not defined

關(guān)于python的閉包問題

如果試圖在一個(gè)內(nèi)部函數(shù)里對(duì)外部作用域(不包括外部函數(shù)的外部作用域)的變量進(jìn)行引用,內(nèi)部函數(shù)就會(huì)被認(rèn)為是閉包

>>> def FuncX(x):
...   def FuncY(y):
...       return x*y
...   return FuncY

對(duì)于FuncY函數(shù)來說,對(duì)在FuncX函數(shù)的整個(gè)作用域(FuncY函數(shù)的非全局作用域的外部作用)的變量x進(jìn)行引用,自此就可以說FuncY函數(shù)就是所謂的閉包

>>> f = FuncX(8)
>>> f
<function FuncY at 0x7f3a436fc2a8>
>>> type(f)
<type 'function'>
>>> f(10)
80
>>> FuncX(7)(8)
56

由于閉包本身是基于內(nèi)部函數(shù)這一概念而來,所以不能在外部函數(shù)的外部作用域?qū)?nèi)部函數(shù)進(jìn)行調(diào)用

>>> FuncY(8)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
NameError: name 'FuncY' is not defined

既然是基于內(nèi)部函數(shù)這一概念而來,自然對(duì)于內(nèi)部函數(shù)來說對(duì)引用外部函數(shù)作用域內(nèi)的變量進(jìn)行修改,將會(huì)啟動(dòng)解釋器的屏蔽機(jī)制

>>> def Func1():
...   x = 233
...   def Func2():
...       x *=x
...       return x
...   return Func2()
... 
>>> Func1()
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "<stdin>", line 6, in Func1
 File "<stdin>", line 4, in Func2
UnboundLocalError: local variable 'x' referenced before assignment

x*=x的左值此時(shí)是內(nèi)部函數(shù)作用域里的變量,此時(shí)試圖將沒有定義的數(shù)據(jù)進(jìn)行平方操作,因此報(bào)錯(cuò)

>>> def Func1():
...   x = 233
...   def Func2():
...       x = 321
...       return x
...   return Func2()
... 
>>> Func1()
321

內(nèi)部函數(shù)創(chuàng)建x變量并且屏蔽外部函數(shù)作用域內(nèi)的x變量

python3之前的解決辦法

應(yīng)用容器類型(list,tuple之類的)存放外部函數(shù)作用域的變量從而不會(huì)被屏蔽機(jī)制屏蔽掉,因?yàn)槿萜黝愋筒皇谴娣旁跅@锩?/p>

>>> def Func1():
...   x = [233]
...   def Func2():
...       x[0] *= x[0]
...       return x[0]
...   return Func2()
... 
>>> Func1()
54289

python3之后的解決辦法:nonlocal關(guān)鍵字

>>> def Func1():
...   x = 233
...   def Func2():
...   nonlocal x
...       x *= x
...       return x
...   return Func2()
... 
>>> Func1()
54289

以上所述是小編給大家介紹的python函數(shù)的閉包問題詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • pytorch如何實(shí)現(xiàn)邏輯回歸

    pytorch如何實(shí)現(xiàn)邏輯回歸

    這篇文章主要介紹了pytorch如何實(shí)現(xiàn)邏輯回歸問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 對(duì)Tensorflow中的變量初始化函數(shù)詳解

    對(duì)Tensorflow中的變量初始化函數(shù)詳解

    今天小編就為大家分享一篇對(duì)Tensorflow中的變量初始化函數(shù)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python爬蟲之Selenium中frame/iframe表單嵌套頁面

    Python爬蟲之Selenium中frame/iframe表單嵌套頁面

    這篇文章主要介紹了Python爬蟲之Selenium中frame/iframe表單嵌套頁面,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Python中免驗(yàn)證跳轉(zhuǎn)到內(nèi)容頁的實(shí)例代碼

    Python中免驗(yàn)證跳轉(zhuǎn)到內(nèi)容頁的實(shí)例代碼

    在本篇文章里小編給大家整理的是一篇關(guān)于Python中免驗(yàn)證跳轉(zhuǎn)到內(nèi)容頁的實(shí)例代碼,有興趣的朋友們可以學(xué)習(xí)分享下。
    2020-10-10
  • 讓Python程序定時(shí)執(zhí)行的8種方法整理

    讓Python程序定時(shí)執(zhí)行的8種方法整理

    在日常工作中,我們常常會(huì)用到需要周期性執(zhí)行的任務(wù),一種方式是采用?Linux?系統(tǒng)自帶的?crond?結(jié)合命令行實(shí)現(xiàn),另外一種方式是直接使用Python。本文整理了一下?Python?定時(shí)任務(wù)的實(shí)現(xiàn)方式,希望對(duì)大家有所幫助
    2023-01-01
  • Python繪制線圖之plt.plot()的介紹以及使用

    Python繪制線圖之plt.plot()的介紹以及使用

    在Python中plt.plot是matplotlib庫中的一個(gè)函數(shù),用于繪制點(diǎn)和線,并對(duì)其樣式進(jìn)行控制,下面這篇文章主要給大家介紹了關(guān)于Python繪制線圖之plt.plot()的介紹以及使用的相關(guān)資料,需要的朋友可以參考下
    2023-12-12
  • 如何利用Python快速統(tǒng)計(jì)文本的行數(shù)

    如何利用Python快速統(tǒng)計(jì)文本的行數(shù)

    這篇文章主要介紹了如何利用Python快速統(tǒng)計(jì)文本的行數(shù),要快速統(tǒng)計(jì)一個(gè)文本文件中的行數(shù),其實(shí)就是要統(tǒng)計(jì)這個(gè)文本文件中換行符的個(gè)數(shù),下面我們就一起進(jìn)入文章看看具體的操作過程吧
    2021-12-12
  • python命令行參數(shù)argparse模塊基本用法詳解

    python命令行參數(shù)argparse模塊基本用法詳解

    argparse?是python自帶的命令行參數(shù)解析包,可以用來方便地讀取命令行參數(shù),這篇文章主要介紹了python命令行參數(shù)-argparse模塊基本用法,需要的朋友可以參考下
    2023-01-01
  • 跟老齊學(xué)Python之大話題小函數(shù)(1)

    跟老齊學(xué)Python之大話題小函數(shù)(1)

    今天本講要講什么呢?今天要介紹幾個(gè)python中的小函數(shù),這幾個(gè)函數(shù)都是從函數(shù)式編程借鑒過來的,它們就是:filter、map、reduce、lambda、yield 有了它們,最大的好處是程序更簡潔
    2014-10-10
  • Python實(shí)現(xiàn)字典按照value進(jìn)行排序的方法分析

    Python實(shí)現(xiàn)字典按照value進(jìn)行排序的方法分析

    這篇文章主要介紹了Python實(shí)現(xiàn)字典按照value進(jìn)行排序的方法,結(jié)合實(shí)例形式分析了Python字典按照value進(jìn)行排序的相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12

最新評(píng)論

高淳县| 宜城市| 徐水县| 临武县| 佛教| 时尚| 邵阳市| 敖汉旗| 英超| 织金县| 从江县| 通江县| 万盛区| 盐亭县| 信丰县| 沙坪坝区| 临沭县| 霍州市| 定边县| 广宁县| 琼中| 洛南县| 竹山县| 石嘴山市| 鹤壁市| 孝昌县| 延寿县| 庆云县| 房产| 沂水县| 沈丘县| 勐海县| 陆丰市| 泗阳县| 方城县| 富裕县| 宽甸| 靖西县| 遂宁市| 河津市| 河间市|