1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      python中閉包的作用-創(chuàng)新互聯(lián)

      創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!

      專注于為中小企業(yè)提供成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)浦口免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了數(shù)千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

      本篇文章為大家展示了python中閉包的作用,代碼簡明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

      1、global關(guān)鍵字的作用

      如果在函數(shù)中需要修改全局變量,則需要使用該關(guān)鍵字,具體參見下面例子。

      variable=100
      def function():
      print(variable) #在函數(shù)內(nèi)不對(duì)全局變量修改,直接訪問是沒問題的,不會(huì)報(bào)錯(cuò)
      function() #輸出100
       
      variable=100
      def function():
      result=variable+111
      print(result) #在函數(shù)內(nèi)不對(duì)全局變量修改,直接使用是沒問題的,不會(huì)報(bào)錯(cuò)
      function() #輸出211
      variable=100
      def function():
      variable+=111
      print(variable) #顯示local variable 'variable' referenced before assignment。
      #即在函數(shù)局部作用域中直接改變?nèi)肿兞康闹禃?huì)報(bào)錯(cuò)
      function()
      variable=100
      def function():
      variable=1000 #此時(shí)修改variable變量的值不會(huì)報(bào)錯(cuò),因?yàn)橐呀?jīng)在函數(shù)局部作用域內(nèi)重新定義variable,會(huì)覆蓋全局variable
      variable+=111
      print(variable)
      function() #輸出1111
      print(variable) #輸出100,雖然函數(shù)內(nèi)部重新覆蓋了variable,但是全局variable并未變,依然還是100

      那如果不再函數(shù)內(nèi)部重新為全局變量賦值,又想改變?nèi)肿兞康闹担瑧?yīng)該怎么做呢?這就要使用global關(guān)鍵字了,如下:

      variable=100
      def function():
      global variable #使用global關(guān)鍵字,表明variable是全局的,此時(shí)就可以了直接在函數(shù)局部作用域內(nèi)改變variable的值了
      variable+=111
      print(variable) #輸出211
      function()
      print(variable) #輸出211,這和上面的不一樣了,發(fā)現(xiàn)全局變量variable本身也改變了

      總結(jié):global的作用就是在“函數(shù)局部作用域”內(nèi)聲明表示一個(gè)全局變量,從而可以在函數(shù)內(nèi)部修改全局變量的值(否則只能訪問不能修改),而且函數(shù)內(nèi)部改變的全局變量的值也會(huì)改變。

      2、函數(shù)局部作用域

      函數(shù)的局部作用域是不能夠保存信息的,即在函數(shù)內(nèi)部聲明變量在函數(shù)調(diào)用結(jié)束之后函數(shù)里面保存的信息就被銷毀了,包括函數(shù)的參數(shù),如下:

      def fun(step):
      num=1
      num+=step
      print(num)
      i=1
      while(i<5):
      fun(3) #連續(xù)調(diào)用函數(shù)4次,每次輸出的值都是4,即3+1,這說明每次調(diào)用fun函數(shù)之后,函數(shù)內(nèi)部定義局部變量num就被銷毀了,
      #沒有保存下來,說明函數(shù)的局部作用域被銷毀了。那如果要保存函數(shù)的局部變量,怎么辦呢?引入“閉包”。
      i+=1

      3、閉包——裝飾器的本質(zhì)也是閉包

      “閉包”的本質(zhì)就是函數(shù)的嵌套定義,即在函數(shù)內(nèi)部再定義函數(shù),如下所示。

      “閉包”有兩種不同的方式,第一種是在函數(shù)內(nèi)部就“直接調(diào)用了”;第二種是“返回一個(gè)函數(shù)名稱”。

      (1)第一種形式——直接調(diào)用

      def Maker(name):
      num=100
      def func1(weight,height,age):
      weight+=1
      height+=1
      age+=1
      print(name,weight,height,age)
      func1(100,200,300) #在內(nèi)部就直接調(diào)用“內(nèi)部函數(shù)”
      Maker('feifei') #調(diào)用外部函數(shù),輸出 feifei 101 201 301

      (2)第二種形式——返回函數(shù)名稱

      def Maker(name):
      num=100
      def func1(weight,height,age):
      weight+=1
      height+=1
      age+=1
      print(name,weight,height,age)
      return func1 #此處不直接調(diào)用,而是返回函數(shù)名稱(Python中一切皆對(duì)象)
      maker=Maker('feifei') #調(diào)用包裝器
      maker(100,200,300) #調(diào)用內(nèi)部函數(shù)

      (3)“閉包”的作用——保存函數(shù)的狀態(tài)信息,使函數(shù)的局部變量信息依然可以保存下來,如下:

      def Maker(step): #包裝器
      num=1
      def fun1(): #內(nèi)部函數(shù)
      nonlocal num #nonlocal關(guān)鍵字的作用和前面的local是一樣的,如果不使用該關(guān)鍵字,則不能再內(nèi)部函數(shù)改變“外部變量”的值
      num=num+step #改變外部變量的值(如果只是訪問外部變量,則不需要適用nonlocal)
      print(num)
      return fun1
      #=====================================#
      j=1
      func2=Maker(3) #調(diào)用外部包裝器
      while(j<5):
      func2() #調(diào)用內(nèi)部函數(shù)4次 輸出的結(jié)果是 4、7、10、13
      j+=1

      從上面的例子可以看出,外部裝飾器函數(shù)的局部變量num=1、以及調(diào)用裝飾器Maker(3)時(shí)候傳入的參數(shù)step=3都被記憶了下來,所以才有1+3=4、4+3=7、7+3=10、10+3=13。

      從這里可以看出,Maker函數(shù)雖然調(diào)用了,但是它的局部變量信息卻被保存了下來,這就是“閉包”的大的作用——保存局部信息不被銷毀。

      4、nonlocal關(guān)鍵字的作用

      該關(guān)鍵字的作用和local的作用類似,就是讓“內(nèi)部函數(shù)”可以修改“外部函數(shù)(裝飾器)”的局部變量值。

      上述內(nèi)容就是python中閉包的作用,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。


      網(wǎng)站標(biāo)題:python中閉包的作用-創(chuàng)新互聯(lián)
      文章路徑:http://www.ef60e0e.cn/article/sheod.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        多伦县| 恩平市| 嵩明县| 龙海市| 贵南县| 托克逊县| 玛曲县| 大埔区| 衡南县| 克拉玛依市| 水富县| 阳高县| 喀喇| 冀州市| 龙江县| 深水埗区| 碌曲县| 博乐市| 彩票| 嘉黎县| 邯郸县| 南开区| 苏尼特左旗| 湘潭市| 乌鲁木齐县| 柘荣县| 固阳县| 马边| 嘉黎县| 肥乡县| 龙泉市| 维西| 香港 | 兴化市| 祁阳县| 双峰县| 辉县市| 夏津县| 九龙县| 庆城县| 铅山县|