<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### 什么是閉包 函數身為第一類對象,它可以作為函數的返回值返回,現在我們來考慮如下的例子: ~~~python def print_msg(): # print_msg 是外圍函數 msg = "zen of python" def printer(): # printer 是嵌套函數 print(msg) return printer another = print_msg() # 輸出 zen of python another() ~~~ 看完這個例子,我們再來定義閉包,維基百科上的解釋是: > 在計算機科學中,閉包(Closure)是詞法閉包(Lexical Closure)的簡稱,是引用了自由變量的函數。這個被引用的自由變量將和這個函數一同存在,即使已經離開了創造它的環境也不例外。 > 所以,有另一種說法認為閉包是由函數和與其相關的引用環境組合而成的實體。 這里的 another 就是一個閉包,閉包本質上是一個函數,它有兩部分組成,printer 函數和變量 msg。閉包使得這些變量的值始終保存在內存中。 閉包,顧名思義,就是一個封閉的包裹,里面包裹著自由變量,就像在類里面定義的屬性值一樣,自由變量的可見范圍隨同包裹,哪里可以訪問到這個包裹,哪里就可以訪問到這個自由變量。 * 閉包 --> 為內層函數提供了運行環境 ### 為什么要使用閉包 閉包避免了使用全局變量,此外,閉包允許將函數與其所操作的某些數據(環境)關連起來。這一點與面向對象編程是非常類似的,在面對象編程中,對象允許我們將某些數據(對象的屬性)與一個或者多個方法相關聯。 一般來說,當對象中只有一個方法時,這時使用閉包是更好的選擇。來看一個例子: ~~~python def adder(x): def wrapper(y): return x + y return wrapper adder5 = adder(5) # 輸出 15 adder5(10) # 輸出 11 adder5(6) ~~~ 這比用類來實現更優雅,此外裝飾器也是基于閉包的一種應用場景。 所有函數都有一個 \_\_closure\_\_屬性,如果這個函數是一個閉包的話,那么它返回的是一個由 cell 對象 組成的元組對象。cell 對象的cell\_contents 屬性就是閉包中的自由變量。 ~~~python >>> adder.__closure__ >>> adder5.__closure__ (<cell at 0x103075910: int object at 0x7fd251604518>,) >>> adder5.__closure__[0].cell_contents 5 ~~~ 這解釋了為什么局部變量脫離函數之后,還可以在函數之外被訪問的原因的,因為它存儲在了閉包的 cell\_contents中了。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看