map 和 lambda 的用法及規則
1. map 函式
map
是 Python 內建函式,用於對可迭代物件中的每個元素應用一個函式,並返回一個 map
物件(可以轉換為其他資料型別,如列表、元組等)。
語法
map(function, iterable, ...)
- 引數
function
:需要應用的函式。iterable
:一個或多個可迭代物件。
- 返回值
- 一個
map
物件,是惰性計算的結果(類似生成器)。
- 一個
基本用法
- 單個可迭代物件
numbers = [1, 2, 3, 4]
result = map(lambda x: x**2, numbers)
print(list(result))
# 輸出: [1, 4, 9, 16]
- 多個可迭代物件
- 當提供多個可迭代物件時,
function
的引數數量必須與可迭代物件的數量一致。
- 當提供多個可迭代物件時,
a = [1, 2, 3]
b = [4, 5, 6]
result = map(lambda x, y: x + y, a, b)
print(list(result))
# 輸出: [5, 7, 9]
2. lambda 函式
lambda
是一種匿名函式,用於建立短小的函式表示式。lambda
函式的主體只能有一個表示式,結果會自動返回。
語法
lambda 引數1, 引數2, ...: 表示式
- 引數:函式引數,可以是位置引數、關鍵字引數等。
- 表示式:只有一個表示式,返回值是該表示式的結果。
基本用法
- 定義和呼叫
add = lambda x, y: x + y
print(add(3, 5))
# 輸出: 8
- 與 map 一起使用
numbers = [1, 2, 3, 4]
result = map(lambda x: x**2, numbers)
print(list(result))
# 輸出: [1, 4, 9, 16]
- 作為函式引數
def apply_func(func, value):
return func(value)
result = apply_func(lambda x: x * 10, 5)
print(result)
# 輸出: 50
3. 使用規則
map 的規則
- 函式必須可呼叫
function
引數需要是一個函式物件,可以是內建函式、自定義函式或lambda
表示式。
- 可迭代物件
iterable
引數必須是可迭代物件(如列表、元組、字串等)。
- 多輸入可迭代物件
- 如果有多個可迭代物件,它們的長度應一致,否則會以最短的可迭代物件為準。
lambda 的規則
- 只能有一個表示式
- 不能包含多個語句或複雜邏輯。
- 匿名
- 不會儲存函式名,適用於短期使用的場景。
- 可返回值
- 自動返回表示式的結果,無需顯式寫
return
。
- 自動返回表示式的結果,無需顯式寫
4. 示例應用
map 和 lambda 的結合
- 對列表中的每個元素求平方
python
複製程式碼
numbers = [1, 2, 3, 4]
squares = map(lambda x: x**2, numbers)
print(list(squares))
# 輸出: [1, 4, 9, 16]
- 對兩個列表的元素逐一相加
a = [1, 2, 3]
b = [4, 5, 6]
result = map(lambda x, y: x + y, a, b)
print(list(result))
# 輸出: [5, 7, 9]
結合其他函式
- 過濾和轉換
- 結合
filter
和lambda
,先過濾再轉換。
- 結合
numbers = [1, 2, 3, 4, 5, 6]
even_squares = map(lambda x: x**2, filter(lambda x: x % 2 == 0, numbers))
print(list(even_squares))
# 輸出: [4, 16, 36]
- 排序
- 結合
sorted
對資料進行排序。
- 結合
data = [{'name': 'Alice', 'age': 30}, {'name': 'Bob', 'age': 25}]
sorted_data = sorted(data, key=lambda x: x['age'])
print(sorted_data)
# 輸出: [{'name': 'Bob', 'age': 25}, {'name': 'Alice', 'age': 30}]
5. 注意事項
- 可讀性
- 過於複雜的
lambda
會降低程式碼可讀性,建議用普通函式代替。
- 過於複雜的
- 惰性計算
map
返回的是惰性物件,需要透過list()
或其他方式將其轉換為實際資料。
- 效率
map
和lambda
更適合簡單操作,對複雜邏輯建議使用普通函式。
6. 小結
- map:對可迭代物件的元素逐一應用函式,返回一個惰性結果。
- lambda:建立短小的匿名函式,適合臨時或簡單的計算邏輯。
- 兩者結合使用,能極大簡化程式碼,尤其在資料處理和函數語言程式設計中。