Python中的延遲綁定原理詳解

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

直接看下面例子

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]的,但結果卻是[4, 4, 4]

下面說下本人對這個結果的理解:

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

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

如果我們要輸出[0, 2, 4], 可以給lambda表達式多加一個缺省參數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函數中的缺省參數,是在Python解釋器遇到lambda a=i (或者def(a=i))時,就必須初始化默認值,此時 每循環一次,缺省參數a就需要找一次i的引用。i=0時,第一個匿名函數的默認參數值就是0,i=1時,第二個匿名函數的默認參數值就是1,以此類推。所以當代碼執行到ld(2)時,每個匿名函數中a的默認值都不一樣。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • python抓取網頁中的圖片示例

    python抓取網頁中的圖片示例

    這篇文章主要介紹了python抓取網頁中圖片的示例,需要的朋友可以參考下
    2014-02-02
  • pycharm重命名文件的方法步驟

    pycharm重命名文件的方法步驟

    在本篇文章中小編給大家分享的是關于pycharm重命名文件的方法步驟,對此有需要的朋友們可以學習參考下。
    2019-07-07
  • 使用Python機器學習降低靜態日志噪聲

    使用Python機器學習降低靜態日志噪聲

    今天小編就為大家分享一篇關于使用Python和機器學習的靜態日志噪聲的文章,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-09-09
  • 弄懂這56個Python使用技巧(輕松掌握Python高效開發)

    弄懂這56個Python使用技巧(輕松掌握Python高效開發)

    這篇文章主要介紹了弄懂這56個Python使用技巧(輕松掌握Python高效開發),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-09-09
  • Python3中使用PyMongo的方法詳解

    Python3中使用PyMongo的方法詳解

    平常在處理數據的時候,必不可少地要使用數據庫存取數據,出于一些原因,個人非常喜歡MongoDB這個數據庫。下面這篇文章主要給大家介紹了Python3中使用PyMongo的方法示例,文中介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07
  • Python程序語言快速上手教程

    Python程序語言快速上手教程

    本文是面向SEO人群的Python程序語言入門教程,也適用于其他沒有程序基礎但想學習些程序,以解決簡單的實際應用需求的人群。在后面會盡量用最基礎的角度來介紹這門語言
    2012-07-07
  • python輸出決策樹圖形的例子

    python輸出決策樹圖形的例子

    今天小編就為大家分享一篇python輸出決策樹圖形的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python內置函數OCT詳解

    Python內置函數OCT詳解

    本文給大家介紹的是python中的內置函數oct(),其主要作用是將十進制數轉換成八進制,再變成字符。有需要的小伙伴可以參考下
    2016-11-11
  • Python程序打包工具py2exe和PyInstaller詳解

    Python程序打包工具py2exe和PyInstaller詳解

    這篇文章主要介紹了Python程序打包工具py2exe和PyInstaller詳解,如果可以提前將程序打包成 Windows平臺的 .exe 文件或者是Linux下的 .sh 腳本,那么使用起來就會方便很多,需要的朋友可以參考下
    2019-06-06
  • Python socket套接字實現C/S模式遠程命令執行功能案例

    Python socket套接字實現C/S模式遠程命令執行功能案例

    這篇文章主要介紹了Python socket套接字實現C/S模式遠程命令執行功能,涉及Python socket套接字編寫服務器/客戶機模式數據傳輸相關操作技巧,需要的朋友可以參考下
    2018-07-07

最新評論

pc蛋蛋计划下载