Khóa học
Bạn có thể tự viết các hàm Python bằng từ khóa def, phần đầu hàm, docstring và thân hàm. Tuy nhiên, có một cách nhanh hơn để viết hàm tại chỗ, gọi là các hàm lambda vì bạn dùng từ khóa lambda.
Một số định nghĩa hàm đủ đơn giản để có thể chuyển thành hàm lambda. Làm vậy giúp bạn viết ít dòng mã hơn, khá tiện lợi và hữu ích, nhất là khi bạn viết và bảo trì các chương trình lớn.
Hàm lambda
Ở đây, ta viết lại hàm raise_to_power thành một hàm lambda. Sau từ khóa lambda, ta chỉ định tên các đối số; rồi dùng dấu hai chấm theo sau là biểu thức xác định giá trị mà hàm sẽ trả về.
raise_to_power = lambda x, y: x ** y
raise_to_power(2, 3)
8
Như đã đề cập, các hàm lambda cho phép bạn viết hàm một cách nhanh gọn, vì vậy chúng tôi không khuyến nghị dùng mọi lúc, nhưng có những tình huống chúng rất hữu ích, như ví dụ dưới đây.
Hàm map() và lambda
Hàm map nhận hai đối số: một hàm và một dãy như danh sách, rồi áp dụng hàm đó lên tất cả các phần tử của dãy. Ta có thể truyền hàm lambda vào map mà không cần đặt tên cho chúng; trong trường hợp này, ta gọi chúng là hàm vô danh.
Trong ví dụ này, ta dùng map() với hàm lambda để bình phương tất cả phần tử của danh sách, và lưu kết quả vào square_all.
nums = [48, 6, 9, 21, 1]
square_all = map(lambda num: num ** 2, nums)
print(square_all)
<map object at 0x103e065c0>
In square_all cho thấy đây là một đối tượng map, nên để xem nó trả về gì, ta dùng list để chuyển nó thành danh sách và in kết quả.
print(list(square_all))
[2304, 36, 81, 441, 1]
Ví dụ tương tác về việc viết hàm lambda
Hàm echo_word dưới đây nhận 2 tham số: một giá trị chuỗi, word1, và một giá trị số nguyên echo. Nó trả về một chuỗi là phép nối của echo bản sao của word1.
Bạn sẽ chuyển hàm đơn giản ở trên thành một hàm lambda.
def echo_word(word1, echo):
"""Concatenate echo copies of word1."""
words = word1 * echo
return words
Trong ví dụ sau, bạn sẽ:
- Định nghĩa một hàm lambda
echo_wordsử dụng các biếnword1vàecho. Tái hiện chức năng của định nghĩa hàm gốcecho_word()như trên. - Gọi
echo_word()với đối số chuỗi'hey'và giá trị5, theo thứ tự đó. Gán lần gọi choresult. Cuối cùng, in biếnresult.
# Define echo_word as a lambda function: echo_word
echo_word = (lambda word1, echo: word1 * echo)
# Call echo_word: result
result = echo_word('hey', 5)
# Print result
print(result)
Khi chạy đoạn mã trên, ta thu được kết quả sau:
heyheyheyheyhey
Để tìm hiểu thêm về hàm Lambda, vui lòng xem video từ khóa học Python Data Science Toolbox (Phần 1) của chúng tôi.
Nội dung này được trích từ khóa học Python Data Science Toolbox (Phần 1) của DataCamp do Hugo Bowne-Anderson biên soạn.
Xem thêm Hướng dẫn về hàm trong Python của DataCamp.