Kiểu dữ liệu function trong Python – Lambda

Lập trình Python cơ bản

4.9 (11 đánh giá)
Tạo bởi I Hate Python Team Cập nhật lần cuối 5 năm trước 48.424 lượt xem 10 bình luận
Tác giả/Dịch giả: I Hate Python Team
Học nhanh

Danh sách bài học

01. Giới thiệu ngôn ngữ lập trình Python 02. Cài đặt môi trường Python 03. Cách chạy chương trình Python 04. Cách ghi chú trong Python 05. Biến trong Python 06. Kiểu dữ liệu số trong Python 07. Kiểu dữ liệu chuỗi trong Python - Phần 1 08. Kiểu dữ liệu chuỗi trong Python - Phần 2 09. Kiểu dữ liệu chuỗi trong Python - Phần 3 10. Kiểu dữ liệu chuỗi trong Python - Phần 4 11. Kiểu dữ liệu chuỗi trong Python - Phần 5 12. Kiểu dữ liệu List trong Python - Phần 1 13. Kiểu dữ liệu List trong Python - Phần 2 14. Kiểu dữ liệu Tuple trong Python 15. Sự khác nhau về toán tử của Hashable object và Unhashable object trong Python 16. Kiểu dữ liệu Set trong Python 16. Kiểu dữ liệu Set trong Python – Phần 2 17. Kiểu dữ liệu Dict trong Python - Phần 1 18. Kiểu dữ liệu Dict trong Python - Phần 2 19. Xử lý file trong Python 20. Iteration và một số hàm hỗ trợ cho iteration object trong Python 21. Nhập xuất trong Python - Hàm xuất 22. Nhập xuất trong Python - Hàm nhập 23. Kiểu dữ liệu Boolean trong Python 24. Cấu trúc rẽ nhánh trong Python 25. Vòng lặp While trong Python 26. Vòng lặp For trong Python - Phần 1 27. Vòng lặp For trong Python - Phần 2 28. Kiểu dữ liệu Function trong Python - Sơ lược về hàm 29. Kiểu dữ liệu Function trong Python - Positional và keyword argument 30. Kiểu dữ liệu Function trong Python - Packing và unpacking arguments 31. Kiểu dữ liệu Function trong Python - Biến locals và globals 32. Kiểu dữ liệu Function trong Python - Return 33. Kiểu dữ liệu function trong Python – Yield 34. Kiểu dữ liệu function trong Python – Lambda 35. Kiểu dữ liệu Function trong Python - Functional tools 36. Kiểu dữ liệu Function trong Python - Đệ quy (recursion) 37. Giới thiệu module trong Python 38. Package trong python

Kiểu dữ liệu function trong Python – Lambda

Dẫn nhập

Trong bài trước, Kteam đã giới thiệu đến bạn YIELD – KIỂU DỮ LIỆU FUNCTION TRONG PYTHON.

Và ở bài này Kteam sẽ lại tìm hiểu với KIỂU DỮ LIỆU FUNCTION TRONG PYTHON – LAMBDA.


Nội dung

Để đọc hiểu bài này tốt nhất bạn cần:

Bạn và Kteam sẽ cùng tìm hiểu những nội dung sau đây

  • Mở đầu
  • Giới thiệu lambda
  • Vì sao dùng lambda?
  • Câu điều kiện cho lambda
  • Lambda chồng lambda

Mở đầu

Ngoài từ khóa “def”, Python cũng hỗ trợ cho bạn một cách khác để có  thể khai báo một function object, đó chính là lambda. Nó chỉ khác từ  khóa “def” ở chỗ, thay vì def tạo một hàm với một cái tên xác định thì lambda trả về một hàm. Thế nên người ta hay gọi lambda hàm nặc danh (anonymous). Nó thường được sử dụng thường xuyên để có thể tạo ra một hàm chỉ với  một dòng lệnh.


Giới thiệu lambda

Ta có cú pháp sau:

lambda argument_1, argument_2, …, argument_n : expression

Như đã nói ở trên, lambda hoạt động như khi bạn dùng từ khóa “def” khai báo hàm. Tuy nhiên, vẫn có một vài ưu điểm nổi trội của lambda so với cách bình thường:

  • lambda là một expression, không phải là một câu lệnh. (Khái niệm expression đã được Kteam giới thiệu). Do đó lambda có thể có ở một vài chỗ mà “def” không thể có (bạn đọc sẽ biết ở phần sau)
  • lambda là một dòng expression duy nhất, không phải là một khối lệnh. Phần expression của lambda giống với phần khối lệnh của hàm với một lệnh return ở cuối hàm nhưng với lambda bạn chỉ cần ghi giá trị mà không cần ghi return. Bạn đọc sẽ hiểu rõ hơn ở phần sau khi biết lambda có thể sử dụng các câu lệnh điều kiện mà không cần phải sử dụng tới lệnh “if”. Nhờ được thiết kế như vậy, lambda được ưu tiên dùng cho việc tạo ra những hàm đơn giản, còn nếu phức tạp thì ta sẽ sử dụng đến từ khóa “def”.

Để có thể hiểu hơn, mời bạn đọc xem qua các ví dụ sau đây

Đây là khi bạn sử dụng từ khóa “def

Còn đây là khi sử dụng lambda

Bạn còn nhớ default argument chứ?

Điều đó cũng có thể làm được với lambda

Bạn cũng lưu ý thêm là lambda cũng phân biệt global local nhé.


Vì sao dùng lambda?

Chung quy thì lambda là một công cụ nhanh gọn để bạn có  thể tạo ra một hàm và sử dụng nó. Việc sử dụng nó thay cho “def” hay không là tùy ở bạn. Đương nhiên là bạn có thể chỉ sử dụng “def” thôi cũng được, hoàn toàn được, đặc biệt là những lúc mà hàm của bạn phức tạp, cần nhiều câu lệnh thì bạn không cần phải suy nghĩ nhiều nữa mà nên dùng “def” luôn. Nhưng giả sử bạn chỉ cần khởi tạo một hàm cấu trúc đơn giản và tái sử dụng nhiều lần thì sao? Lúc đó hãy nghĩ tới lambda nhé!

Chúng ta đến với một số ví dụ mà lambda hoàn toàn chiếm ưu thế so với “def”.

Rất tiện lợi phải không nào, dĩ nhiên điều này “def” không thể có vì như đề cập ở phần trên, lambda là một expression, không phải một câu lệnh. Nên lambda có thể ở nhiều nơi mà “def” không thể.

Với ví dụ bên trên khi bạn muốn sử dụng “def”, bạn phải khởi tạo hàm ở ngoài rồi đưa vào list.

Không chỉ mình list, bạn có thể sử dụng lambda với dictionary. Mời bạn đọc xem ví dụ sau đây:

Lưu ý: Bạn để ý ví dụ trên, phần argument của lambda ta để trống, điều này hoàn toàn đúng cú pháp vì phần argument optional (không bắt buộc) nhưng phần expression bắt buộc phải có một expression.

Ta thử lại ví dụ trên nhưng không dùng lambda mà dùng “def

Nó cũng như lambda thôi, nhưng rõ ràng ta thấy lambda tiện lợi hơn “def” dù cho chỉ vài dòng code. Điểm mạnh vượt trội của lambda so với “def” hoàn toàn được thể hiện với những hàm tính toán đơn giản nhanh chóng. Hơn thế nữa, khi dùng “def”, bạn phải tạo ra một cái tên cho nó, và đôi khi việc bạn nghĩ ra một cái tên cho một cái hàm thực sự không hề đơn giản (việc này khá hiếm nhưng đã xảy ra).

Bạn sẽ còn thấy lambda còn tiện lợi hơn rất nhiều khi bạn tìm hiểu hàm map (Kteam sẽ giới thiệu ở bài khác).


Câu điều kiện cho lambda

Rõ ràng bạn đã thấy, lambda chỉ nhận một expression, do đó, bạn không thể chèn câu lệnh điều kiện như bình thường được mà phải theo một cách khác.

Giả sử với lệnh if như sau

Thì có thể viết dưới dạng expression với 2 cách như sau

Cách 1:

Cách 2:

Bạn có cần nhớ cả 2 cái không? Không cần thiết đâu, Kteam khuyến khích bạn đọc ghi nhớ và dùng cách 1 vì sự rõ ràng và dĩ nhiên cũng không nên bối rối khi thấy cách 2.

Hãy đến với ví dụ để hiểu thêm

Ví dụ sau đây là kiểm tra xem số đó cùng có hai ước 2 và 3 hay không? Nếu có thì trả về 1, không thì là 0. Ví dụ này hoàn toàn có thể sử dụng lambda bằng cách sử dụng “and” nhưng ở đây Kteam muốn bạn biết chúng ta có thể lồng các expression lên nhau.

Ở ví dụ trên, phần if bạn có thể thu gọn biểu thức đi một tẹo bằng cách dùng phủ định


Lambda chồng lambda

Phần này sẽ hơi rắc rối nếu như bạn chưa thực sự hiểu lambda. Bạn có thể chồng 2 hoặc 3 lambda lên nhau cùng một lúc. Nhưng phải chú ý để biết được mình đang làm gì nhé.

Ví dụ trên ta sử dụng “def”, và bạn để ý hàm sử dụng “def” trên ta hoàn toàn có thể sử dụng lambda thay thế.

Thực tế thì những lambda chồng lambda này khá phức tạp. Python vốn không thích sự khó hiểu, phức tạp, sự thiếu thanh lịch thế nên thường thì việc chồng lambda như thế này rất không được khuyến khích.


Kết luận

Qua bài viết này, Bạn đã biết về hàm nặc danh lambda.

Ở bài tiếp theo, Kteam sẽ nói đến MỘT SỐ HÀM HAY SỬ DỤNG KẾT HỢP VỚI HÀM NẶC DANH TRONG PYTHON

Cảm ơn bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quyên “Luyện tập – Thử thách – Không ngại khó”.


Tải xuống

Tài liệu

Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Kiểu dữ liệu function trong Python – Lambda dưới dạng file PDF trong link bên dưới.

Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com

Đừng quên likeshare để ủng hộ Kteam và tác giả nhé!


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

Tác giả/Dịch giả

Chúng tôi là những người có niềm yêu thích Python và muốn Python được nhiều người biết đến hơn ở Việt Nam.

Khóa học

Lập trình Python cơ bản

Lập trình Python cơ bản

Đánh giá

4.9
11 đánh giá
Đánh giá
5
10
4
1
3
2
1
trunghieu2011th đã đánh giá 6 tháng trước

linhhng đã đánh giá 3 năm trước

phungduongd đã đánh giá 3 năm trước

Nguyen Thanh Nhu đã đánh giá 3 năm trước

Coding_Brain đã đánh giá 3 năm trước

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
hieunxhe191630 đã bình luận 7 tháng trước

def kteam(first_string):

    return lambda second_string: first_string + second_string

 

slogan = kteam('How Kteam ')

a = slogan('Education with free')

 

print(a)

Trần Văn Nhã đã bình luận 2 năm trước

a giảng hay quá ạ

Boima12 đã bình luận 2 năm trước

code tìm giá trị lớn nhất của 4 số chỉ trong 2 dòng!

find_greatest = lambda x,y,z,e: print(((x if x>y else y) if (x if x>y else y)>z else z) if ((x if x>y else y) if (x if x>y else y)>z else z)>e else e)
find_greatest(10,27,2707,1)

 

nhan47 đã bình luận 4 năm trước

Dễ hiểu. Cảm ơn tác giả. 

nhan47 đã bình luận 4 năm trước

Dễ hiểu. Cảm ơn tác giả. 

Không có video.