91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中的延遲綁定原理詳解

發布時間:2020-10-24 23:09:51 來源:腳本之家 閱讀:169 作者:愛哭鼻子的小憂傷 欄目:開發技術

直接看下面例子

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的默認值都不一樣。

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

思茅市| 吐鲁番市| 伊金霍洛旗| 潍坊市| 且末县| 尚志市| 龙海市| 铜陵市| 仁化县| 富宁县| 永吉县| 金沙县| 遂川县| 尚义县| 柘城县| 瓦房店市| 武川县| 黎平县| 巴中市| 徐州市| 大兴区| 大余县| 宜君县| 新疆| 陇西县| 孝义市| 修武县| 花莲市| 仙居县| 竹山县| 潜山县| 常山县| 邳州市| 崇礼县| 达孜县| 佛坪县| 江北区| 扎囊县| 金乡县| 仙桃市| 南皮县|