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

Python中的延遲綁定原理詳解

 更新時間:2019年10月11日 10:49:13   作者:愛哭鼻子的小憂傷  
這篇文章主要介紹了Python中的延遲綁定原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

直接看下面例子

my_ld = [lambda x:x*i for i in range(3)]
my_list = [ld(2) for ld in my_ld]
print(my_list)

本想是想通過以上代碼,輸出[0, 2, 4]的,但結(jié)果卻是[4, 4, 4]

下面說下本人對這個結(jié)果的理解:

因為Python解釋器,遇到lambda(或者def),只是定義了一個匿名函數(shù)對象,并保存在內(nèi)存中,只有等到調(diào)用這個匿名函數(shù)的時候,才會執(zhí)行函數(shù)內(nèi)部的代碼(x*i)。所以匿名函數(shù)中的i并不是立即引用后面循環(huán)中的i值的,而是在調(diào)用嵌套函數(shù)的時候,才會查找i的值,這個特性也就是延遲綁定。

而 for i in range(3) 是另外一個表達(dá)式,Python解釋器解釋到就會直接執(zhí)行,代碼執(zhí)行到ld(2)時,循環(huán)已經(jīng)結(jié)束了,此時的i指向2 ,my_ld為包含了三個匿名函數(shù)對象的列表,所以打印my_list的結(jié)果是[4, 4, 4]。

如果我們要輸出[0, 2, 4], 可以給lambda表達(dá)式多加一個缺省參數(shù)a=i,代碼如下:

my_ld = [lambda x, a=i:x*a for i in range(3)]
my_list = [ld(2) for ld in my_ld]
print(my_list)

Python函數(shù)中的缺省參數(shù),是在Python解釋器遇到lambda a=i (或者def(a=i))時,就必須初始化默認(rèn)值,此時 每循環(huán)一次,缺省參數(shù)a就需要找一次i的引用。i=0時,第一個匿名函數(shù)的默認(rèn)參數(shù)值就是0,i=1時,第二個匿名函數(shù)的默認(rèn)參數(shù)值就是1,以此類推。所以當(dāng)代碼執(zhí)行到ld(2)時,每個匿名函數(shù)中a的默認(rèn)值都不一樣。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用Python腳本實現(xiàn)批量網(wǎng)站存活檢測遇到問題及解決方法

    使用Python腳本實現(xiàn)批量網(wǎng)站存活檢測遇到問題及解決方法

    本文是小編自己編寫的一個使用python實現(xiàn)批量網(wǎng)站存活檢測。在項目測試中非常有用。本文給大家分享了遇到的問題及解決方案,非常不錯,具有參考借鑒價值,感興趣的朋友一起看看吧
    2016-10-10
  • Python利用前序和中序遍歷結(jié)果重建二叉樹的方法

    Python利用前序和中序遍歷結(jié)果重建二叉樹的方法

    這篇文章主要介紹了Python利用前序和中序遍歷結(jié)果重建二叉樹的方法,實例分析了Python二叉樹的定義與遍歷操作技巧,需要的朋友可以參考下
    2016-04-04
  • pytorch中獲取模型input/output shape實例

    pytorch中獲取模型input/output shape實例

    今天小編就為大家分享一篇pytorch中獲取模型input/output shape實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python opencv判斷圖像是否為空的實例

    python opencv判斷圖像是否為空的實例

    今天小編就為大家分享一篇python opencv判斷圖像是否為空的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Flask框架學(xué)習(xí)筆記之模板操作實例詳解

    Flask框架學(xué)習(xí)筆記之模板操作實例詳解

    這篇文章主要介紹了Flask框架學(xué)習(xí)筆記之模板操作,結(jié)合實例形式詳細(xì)分析了flask框架模板引擎Jinja2的模板調(diào)用、模板繼承相關(guān)原理與操作技巧,需要的朋友可以參考下
    2019-08-08
  • python matplotlib 畫dataframe的時間序列圖實例

    python matplotlib 畫dataframe的時間序列圖實例

    今天小編就為大家分享一篇python matplotlib 畫dataframe的時間序列圖實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • 關(guān)于Python中異常(Exception)的匯總

    關(guān)于Python中異常(Exception)的匯總

    異常是指程序中的例外,違例情況。異常機制是指程序出現(xiàn)錯誤后,程序的處理方法。當(dāng)出現(xiàn)錯誤后,程序的執(zhí)行流程發(fā)生改變,程序的控制權(quán)轉(zhuǎn)移到異常處理。下面這篇文章主要匯總了關(guān)于Python中異常(Exception)的相關(guān)資料,需要的朋友可以參考下。
    2017-01-01
  • Python練習(xí)-承壓計算

    Python練習(xí)-承壓計算

    這篇文章主要介紹了Python練習(xí)-承壓計算,前面我們練習(xí)了Python購物單,這篇我們繼續(xù)練習(xí)承壓計算,和前篇文章一樣還是問題描述開始,需要的小伙伴可以參考一下
    2022-01-01
  • Python中的查找算法代碼實例

    Python中的查找算法代碼實例

    這篇文章主要介紹了Python中的查找算法代碼實例,算法是解決一系列問題的清晰指令,也就是,能對一定規(guī)范的輸入,在有限的時間內(nèi)獲得所要求的輸出,簡單來說,算法就是解決一個問題的具體方法和步驟,算法是程序的靈魂,需要的朋友可以參考下
    2023-07-07
  • Python2 Selenium元素定位的實現(xiàn)(8種)

    Python2 Selenium元素定位的實現(xiàn)(8種)

    這篇文章主要介紹了Python2 Selenium元素定位的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02

最新評論