欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談一下Python中閉包的作用

 更新時(shí)間:2023年12月26日 08:55:59   作者:wrr-cat  
這篇文章主要介紹了淺談一下Python中閉包的作用,閉包特點(diǎn)是返回的函數(shù)還引用了外層函數(shù)的局部變量,所以,要正確使用閉包,就要確保引用的局部變量在函數(shù)返回后不能變,需要的朋友可以參考下

一、前言

在函數(shù)內(nèi)部定義的函數(shù)和外部定義的函數(shù)是一樣的,只是他們無法被外部訪問:

def g():
    print 'g()...'
def f():
    print 'f()...'
    return g

將 g 的定義移入函數(shù) f 內(nèi)部,防止其他代碼調(diào)用 g:

def f():
    print 'f()...'
    def g():
        print 'g()...'
    return g

但是,考察定義的 calc_sum 函數(shù):

def calc_sum(lst):
    def lazy_sum():
        return sum(lst)
    return lazy_sum

注意: 發(fā)現(xiàn)沒法把 lazy_sum 移到 calc_sum 的外部,因?yàn)樗昧?calc_sum 的參數(shù) lst。

像這種內(nèi)層函數(shù)引用了外層函數(shù)的變量(參數(shù)也算變量),然后返回內(nèi)層函數(shù)的情況,稱為閉包(Closure)。

二、閉包函數(shù)

閉包特點(diǎn)是返回的函數(shù)還引用了外層函數(shù)的局部變量,所以,要正確使用閉包,就要確保引用的局部變量在函數(shù)返回后不能變。舉例如下:

# 希望一次返回3個函數(shù),分別計(jì)算1x1,2x2,3x3:
def count():
    fs = [ ]
    for i in range(1, 4):
        def f():
             return i*i
        fs.append(f)
    return fs
f1, f2, f3 = count()

你可能認(rèn)為調(diào)用 f1(),f2()和 f3()結(jié)果應(yīng)該是 1,4,9,但實(shí)際結(jié)果全部都是 9(請自己動手驗(yàn)證)。

原因就是當(dāng) count()函數(shù)返回了 3 個函數(shù)時(shí),這 3 個函數(shù)所引用的變量 i 的值已經(jīng)變成了 3。由于 f1、f2、f3 并沒有被調(diào)用,所以,此時(shí)他們并未計(jì)算 i*i,當(dāng) f1 被調(diào)用時(shí):

f1()
9     # 因?yàn)閒1現(xiàn)在才計(jì)算i*i,但現(xiàn)在i的值已經(jīng)變?yōu)?

因此,返回函數(shù)不要引用任何循環(huán)變量,或者后續(xù)會發(fā)生變化的變量。

返回閉包不能引用循環(huán)變量,請改寫 count()函數(shù),讓它正確返回能計(jì)算 1x1、2x2、3x3 的函數(shù)。

考察下面的函數(shù) f:

def f(j):
    def g():
        return j*j
    return g

它可以正確地返回一個閉包 g,g 所引用的變量 j 不是循環(huán)變量,因此將正常執(zhí)行。在 count 函數(shù)的循環(huán)內(nèi)部,如果借助 f 函數(shù),就可以避免引用循環(huán)變量 i。

參考代碼:

def count():
    fs = []
    for i in range(1, 4):
        def f(j):
            def g():
                return j*j
            return g
        r = f(i)
        fs.append(r)
    return fs
f1, f2, f3 = count()
print f1(), f2(), f3()

三、程序?qū)嵗?/h2>

到此這篇關(guān)于淺談一下Python中閉包的作用的文章就介紹到這了,更多相關(guān)Python閉包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python+wxPython實(shí)現(xiàn)個人鏈接收藏夾

    Python+wxPython實(shí)現(xiàn)個人鏈接收藏夾

    這篇文章主要介紹了如何使用wxPython和XML數(shù)據(jù)源創(chuàng)建一個具有按鈕和Web視圖的應(yīng)用程序窗口,以便輕松管理和訪問各種網(wǎng)頁鏈接,感興趣的可以了解下
    2023-08-08
  • python?OpenCV計(jì)算圖片相似度的5種算法

    python?OpenCV計(jì)算圖片相似度的5種算法

    本文主要介紹了python?OpenCV計(jì)算圖片相似度的5種算法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • python Polars庫的使用簡介

    python Polars庫的使用簡介

    這篇文章主要介紹了python Polars庫的使用簡介,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-04-04
  • Python&Matlab實(shí)現(xiàn)螞蟻群算法求解最短路徑問題的示例

    Python&Matlab實(shí)現(xiàn)螞蟻群算法求解最短路徑問題的示例

    本文主要介紹了Python&Matlab實(shí)現(xiàn)螞蟻群算法求解最短路徑問題的示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • python實(shí)現(xiàn)跨年煙花動態(tài)效果

    python實(shí)現(xiàn)跨年煙花動態(tài)效果

    這篇文章主要介紹了python實(shí)現(xiàn)跨年煙花的動態(tài)效果,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-01-01
  • python命令行工具Click快速掌握

    python命令行工具Click快速掌握

    這篇文章主要介紹了python命令行工具Click快速掌握,寫 Python 的經(jīng)常要寫一些命令行工具,雖然標(biāo)準(zhǔn)庫提供有命令行解析工具 Argparse,但是寫起來非常麻煩,我很少會使用它。命令行工具中用起來最爽的就是 Click,,需要的朋友可以參考下
    2019-07-07
  • Python3中的循環(huán)語句示例詳解

    Python3中的循環(huán)語句示例詳解

    這篇文章主要介紹了Python3?循環(huán)語句,本文將詳細(xì)介紹Python3中的循環(huán)語句,給出各種循環(huán)的使用示例,以及運(yùn)行結(jié)果的解釋,需要的朋友可以參考下
    2023-04-04
  • python 批量解壓壓縮文件的實(shí)例代碼

    python 批量解壓壓縮文件的實(shí)例代碼

    這篇文章主要介紹了python 批量解壓壓縮文件的實(shí)例代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06
  • Django filter動態(tài)過濾與排序?qū)崿F(xiàn)過程解析

    Django filter動態(tài)過濾與排序?qū)崿F(xiàn)過程解析

    這篇文章主要介紹了Django filter動態(tài)過濾與排序?qū)崿F(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Selenium之模擬登錄鐵路12306的示例代碼

    Selenium之模擬登錄鐵路12306的示例代碼

    這篇文章主要介紹了Selenium之模擬登錄鐵路12306的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評論