中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

python面試題實例代碼分析

發布時間:2022-10-13 09:58:55 來源:億速云 閱讀:144 作者:iii 欄目:編程語言

本篇內容主要講解“python面試題實例代碼分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“python面試題實例代碼分析”吧!

題目:下面這段代碼的執行結果是什么。
def multiply():
    return [lambda x: i * x for i in range(4)]

print([m(100) for m in multiply()])

運行結果:

[300, 300, 300, 300]

上面代碼的運行結果很容易被誤判為[0, 100, 200, 300]。首先需要注意的是multiply函數用生成式語法返回了一個列表,列表中保存了4個Lambda函數,這4個Lambda函數會返回傳入的參數乘以i的結果。需要注意的是這里有閉包(closure)現象,multiply函數中的局部變量i的生命周期被延展了,由于i最終的值是3,所以通過m(100)調列表中的Lambda函數時會返回300,而且4個調用都是如此。

如果想得到[0, 100, 200, 300]這個結果,可以按照下面幾種方式來修改multiply函數。

方法一:使用生成器,讓函數獲得i的當前值。

def multiply():
    return (lambda x: i * x for i in range(4))

print([m(100) for m in multiply()])

或者

def multiply():
    for i in range(4):
        yield lambda x: x * i

print([m(100) for m in multiply()])

方法二:使用偏函數,徹底避開閉包。

from functools import partial
from operator import __mul__

def multiply():
    return [partial(__mul__, i) for i in range(4)]

print([m(100) for m in multiply()])

到此,相信大家對“python面試題實例代碼分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

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

AI

常熟市| 大悟县| 邓州市| 平乐县| 奇台县| 呈贡县| 博兴县| 兰坪| 茌平县| 泰来县| 栾川县| 会宁县| 城市| 方山县| 南溪县| 南宫市| 和龙市| 太白县| 腾冲县| 沧州市| 富锦市| 宁河县| 乃东县| 广河县| 泸定县| 六安市| 饶河县| 资溪县| 家居| 汝南县| 江西省| 新平| 那坡县| 乾安县| 南江县| 洪洞县| 南阳市| 汉阴县| 宜丰县| 昌都县| 容城县|