iT邦幫忙

0

Python 的 Lambda 函數:簡潔而強大的匿名函數

  • 分享至 

  • xImage
  •  

什麼是 Lambda 函數?

Lambda 函數,也稱為匿名函數,是一種在單行內定義的小函數。它沒有固定的名稱,通常用於一些簡單的運算,不需要定義一個完整的函數。

Lambda 函數的語法

lambda arguments: expression

  • lambda:關鍵字,表示定義一個匿名函數。
  • arguments:函數的參數,可以有多個,用逗號分隔。
  • expression:函數的運算表達式,也就是函數的返回值。

Lambda 函數的例子

# 傳統函數寫法
def square(x):
    return x * x

# Lambda 函數寫法
square = lambda x: x * x

# 兩者效果相同,都可以計算一個數的平方
print(square(5))  # 输出 25

Lambda 函數的常見用法

  • map:將函數應用到序列的每個元素上。
    map(function, iterable)
    function: 要應用於每個元素的函數。
    iterable: 可迭代對象,也就是要進行操作的數據集合。
numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x*x, numbers))
print(squared)  # 输出 [1, 4, 9, 16]
  • filter:過濾序列中的元素
    filter(function, iterable)
    function: 這個函數會返回一個布林值,表示元素是否符合條件。
    iterable: 要進行篩選的可迭代對象。
numbers = [1, 2, 3, 4, 5]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  # 输出 [2, 4]
  • sorted:對可迭代對象進行排序。
    sorted(iterable, key=None, reverse=False)
fruits = ['banana', 'apple', 'orange']
sorted_fruits = sorted(fruits, key=lambda x: x[-1])
print(sorted_fruits)  # 输出 ['banana', 'orange', 'apple']

最終的排序結果是按照水果名稱的最後一個字母的字母序x[-1]進行排序的。

  • iterable: 要排序的可迭代物件。

  • key: 一個自訂的函數,用來指定排序的依據。這個函數會對每個元素進行操作,並傳回一個值,排序就是根據傳回的值進行的。

  • reverse: 一個布林值,指定排序順序。 True 表示降序,False 表示升序(預設)。

  • 作為參數傳遞:

fruits = ['banana', 'apple', 'orange']
sorted_fruits = sorted(fruits, key=lambda x: x[-1])
print(sorted_fruits)  # 输出 ['banana', 'orange', 'apple']

關於 map、filter 和 sorted 中 iterable 的位置

不曉得你有沒有發現,在map、filter 和 sorted 中 iterable 的位置有點不同?

  • map 與 filter:
    map(function, iterable)
    iterable(要操作的序列)總是放在 function(要套用的函數)的後面。
    這是因為 map 和 filter 的主要目的是對序列中的每個元素應用一個函數,所以序列本身就是操作的物件。r

-sorted:
sorted(iterable, key=None, reverse=False)
iterable 放在 key(排序的依据)的前面。
这是因为 sorted 的主要目的是对序列iterable进行排序,而 key 是一个可选参数,用于指定排序的依据。

Lambda 函數的優缺點

  • 優點:
    • 簡潔: 對於簡單的運算,Lambda 函數可以寫得非常簡潔。
    • 靈活: 可以作為參數傳遞給其他函數,提高程式碼的可讀性。
  • 缺點:
    • 可讀性: 過於複雜的 Lambda 表達式可能降低程式碼的可讀性。
    • 單行限制: Lambda 函數通常只能寫一行,對於複雜的邏輯不太適合。

何時使用 Lambda 函數?

簡單的運算: 對於一些簡單的運算,如平方、求絕對值等,Lambda 函數非常適合。
作為回調函數: 在使用一些庫函數時,需要傳入一個函數作為參數,Lambda 函數可以簡化寫法。
與高階函數結合: map、filter、sorted 等高階函數與 Lambda 函數配合使用,可以寫出非常簡潔的程式碼。

總結

Lambda 函數作為 Python 的一個重要特性,可以讓程式碼更加簡潔和靈活。但過度使用 Lambda 函數也可能降低程式


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言