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

溫馨提示×

溫馨提示×

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

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

怎么應用Python lambda

發布時間:2020-08-25 16:15:09 來源:億速云 閱讀:156 作者:Leah 欄目:編程語言

怎么應用Python lambda?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

lambda 表達式是現代編程語言爭相引入的一種語法,如果說函數是命名的、方便復用的代碼塊,那么 lambda 表達式則是功能更靈活的代碼塊,它可以在程序中被傳遞和調用。

回顧局部函數

get_math_func() 函數將返回三個局部函數之一。該函數代碼如下:

def get_math_func(type) :
    # 定義三個局部函數
    ...
    # 返回局部函數
    if type == "square" :
        return square
    if type == "cube" :
        return cube
    else:
        return factorial

由于局部函數的作用域默認僅停留在其封閉函數之內,因此這三個局部函數的函數名的作用太有限了,即僅僅是在程序的 if 語句中作為返回值使用。一旦離開了 get_math_func() 函數體,這三個局部函數的函數名就失去了意義。

既然局部函數的函數名沒有太大的意義,那么就考慮使用 lambda 表達式來簡化局部函數的寫法。

使用 lambda 表達式代替局部函數

如果使用 lambda 表達式來簡化 get_math_func() 函數,則可以將程序改寫成如下形式:

def get_math_func(type) :
    result=1
    # 該函數返回的是Lambda表達式
    if type == 'square':
        return lambda n: n * n  # ①
    elif type == 'cube':
        return lambda n: n * n * n  # ②
    else:
        return lambda n: (1 + n) * n / 2 # ③
# 調用get_math_func(),程序返回一個嵌套函數
math_func = get_math_func("cube")
print(math_func(5)) # 輸出125
math_func = get_math_func("square")
print(math_func(5)) # 輸出25
math_func = get_math_func("other")
print(math_func(5)) # 輸出15.0

在上面代碼中,return 后面的部分使用 lambda 關鍵字定義的就是 lambda 表達式,Python 要求 lambda 表達式只能是單行表達式。

注意:由于 lambda 表達式只能是單行表達式,不允許使用更復雜的函數形式,因此上面 ③ 號代碼處改為計算 1+2+3+…+n 的總和。

lambda 表達式的語法格式如下:

lambda [parameter_list] : 表達式

從上面的語法格式可以看出 lambda 表達式的幾個要點:

lambda 表達式必須使用 lambda 關鍵字定義。

在 lambda 關鍵字之后、冒號左邊的是參數列表,可以沒有參數,也可以有多個參數。如果有多個參數,則需要用逗號隔開,冒號右邊是該 lambda 表達式的返回值。

實際上,lambda 表達式的本質就是匿名的、單行函數體的函數。因此,lambda 表達式可以寫成函數的形式。例如,對于如下 lambda 表達式:

lambda x , y:x + y

可改寫為如下函數形式:

def add(x, y): return x+ y上面定義函數時使用了簡化語法:當函數體只有一行代碼時,可以直接把函數體的代碼放在與函數頭同一行。

總體來說,函數比 lambda 表達式的適應性更強,lambda 表達式只能創建簡單的函數對象(它只適合函數體為單行的情形)。但 lambda 表達式依然有如下兩個用途:

對于單行函數,使用 lambda 表達式可以省去定義函數的過程,讓代碼更加簡潔。

對于不需要多次復用的函數,使用 lambda 表達式可以在用完之后立即釋放,提高了性能。

下面代碼示范了通過 lambda 表達式來調用 Python 內置的 map() 函數:

# 傳入計算平方的lambda表達式作為參數
x = map(lambda x: x*x , range(8))
print([e for e in x]) # [0, 1, 4, 9, 16, 25, 36, 49]
# 傳入計算平方的lambda表達式作為參數
y = map(lambda x: x*x if x % 2 == 0 else 0, range(8))
print([e for e in y]) # [0, 0, 4, 0, 16, 0, 36, 0]

正如從上面代碼所看到的,內置的 map() 函數的第一個參數需要傳入函數,此處傳入了函數的簡化形式:lambda 表達式,這樣程序更加簡潔,而且性能更好。


看完上述內容,你們掌握怎么應用Python lambda的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

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

AI

灌云县| 滕州市| 孟连| 玉环县| 兴和县| 承德市| 寻甸| 长沙县| 泗洪县| 白水县| 宜城市| 甘孜| 怀化市| 台湾省| 定远县| 中卫市| 任丘市| 五常市| 睢宁县| 桐庐县| 安陆市| 夏津县| 郧西县| 阳新县| 民县| 灌南县| 黑龙江省| 阿鲁科尔沁旗| 浮山县| 宣化县| 华阴市| 志丹县| 喜德县| 安陆市| 乐东| 凤山县| 奉贤区| 葵青区| 黎川县| 永宁县| 罗山县|