Logo InterData
  • Trang chủ
  • Blog
    • Máy chủ (Server)
    • Máy chủ ảo (VPS)
    • Cloud Server
    • Web Hosting
    • Website
    • Trí tuệ nhân tạo (AI)
    • Lập trình
  • Dịch vụ
    • Thuê chỗ đặt máy chủ
    • Thuê Cloud Server
    • Thuê Hosting
    • Thuê máy chủ
    • Thuê VPS
  • Sự kiện
  • Khuyến Mãi
  • Trang chủ
  • Blog
    • Máy chủ (Server)
    • Máy chủ ảo (VPS)
    • Cloud Server
    • Web Hosting
    • Website
    • Trí tuệ nhân tạo (AI)
    • Lập trình
  • Dịch vụ
    • Thuê chỗ đặt máy chủ
    • Thuê Cloud Server
    • Thuê Hosting
    • Thuê máy chủ
    • Thuê VPS
  • Sự kiện
  • Khuyến Mãi
Trang Chủ Lập trình

Hàm ẩn danh (Anonymous Function/Lambda): Cú pháp & Ví dụ dễ hiểu

Python mang đến nhiều công cụ giúp code trở nên mạnh mẽ và tinh gọn hơn, trong đó có hàm ẩn danh, hay còn gọi là Lambda Function. Nắm vững khái niệm hàm ẩn danh là gì sẽ mở ra nhiều cách viết code thú vị và hiệu quả. Bài viết này từ InterData sẽ cùng bạn tìm hiểu sâu về hàm lambda là gì, cú pháp, ưu nhược điểm, cách phân biệt với hàm def và cách ứng dụng hiệu quả trong thực tế lập trình Python. Đọc ngay!

NỘI DUNG

Toggle
  • Hàm ẩn danh là gì?
  • Cú pháp hàm Lambda của Python
  • Ví dụ chi tiết về hàm ẩn danh
  • Lợi ích và hạn chế của hàm ẩn danh Lambda
    • Lợi ích của hàm ẩn danh Lambda
    • Hạn chế của hàm ẩn danh Lambda
  • Sự khác biệt giữa hàm lambda và def từ khóa
    • Tên gọi
    • Cú pháp định nghĩa
    • Nội dung bên trong hàm
    • Xử lý giá trị trả về
  • Cách sử dụng hàm Lambda
    • Đối số trong các hàm bậc cao ( map, filter, reduce)
    • Trả về hàm dưới dạng giá trị
    • Sử dụng hàm lambda trong sắp xếp
  • Trường hợp sử dụng hàm Lambda trong Python phổ biến
    • Sử dụng với các hàm bậc cao
    • Cho các hàm đơn giản, dùng ngay lập tức

Hàm ẩn danh là gì?

Hàm ẩn danh trong Python (Anonymous Function), thường được biết đến với tên gọi Hàm Lambda, là một dạng hàm đặc biệt không có tên định danh rõ ràng như hàm thông thường. Chúng được tạo ra bằng cách sử dụng từ khóa lambda và được thiết kế để thực hiện các chức năng đơn giản, gọn lẹ.

Mục đích chính của việc sử dụng hàm lambda là để viết code ngắn gọn và súc tích hơn, đặc biệt là khi bạn cần một hàm nhỏ cho một tác vụ cụ thể và không có ý định tái sử dụng nó ở nhiều nơi khác.

Hàm ẩn danh
Hàm ẩn danh

Cú pháp hàm Lambda của Python

Cú pháp: lambda arguments : expression
  • Lambda: Từ khóa để xác định hàm.
  • arguments_list: Danh sách các tham số đầu vào được phân tách bằng dấu phẩy (giống như trong một hàm thông thường).
  • expression: Một biểu thức duy nhất được đánh giá và trả về.

Ví dụ chi tiết về hàm ẩn danh

Ví dụ 1: Ví dụ khai báo một lambda function để tính tổng của 2 biến.

add = lambda a, b: a + b

# call lambda

add(3, 4) # 7

Kiểm tra xem lambda có kiểu dữ liệu là gì.

add = lambda a, b: a + b

type(add) # function

Ví dụ 2: 

greet = lambda : print('Hello World')

Ở đây định nghĩa một hàm lambda và gán nó cho biến có tên greet.

Để thực hiện hàm lambda này, chúng ta cần gọi nó. Sau đây là cách chúng ta có thể gọi hàm lambda

# call the lambda
greet()

Hàm lambda ở trên chỉ đơn giản in ra văn bản ‘Hello World’.

Lưu ý: Hàm lambda này không có đối số nào.

Lợi ích và hạn chế của hàm ẩn danh Lambda

Việc sử dụng hàm lambda trong Python mang lại cả những lợi ích đáng kể về sự gọn nhẹ và tiện lợi, đồng thời cũng có những hạn chế riêng mà bạn cần nắm rõ để áp dụng đúng cách.

Lợi ích chủ yếu nằm ở cú pháp ngắn gọn và sự phù hợp khi dùng với các hàm bậc cao, trong khi hạn chế chính là khả năng biểu diễn logic phức tạp và đôi khi ảnh hưởng đến tính dễ đọc của code.

Lợi ích của hàm ẩn danh Lambda

Cú pháp ngắn gọn

Ưu điểm nổi bật nhất của hàm lambda là cú pháp cực kỳ súc tích. Nó cho phép bạn định nghĩa một hàm đơn giản chỉ trong một dòng code duy nhất, giảm bớt số lượng dòng code cần viết.

Sự gọn gàng này rất tiện lợi khi bạn cần nhanh chóng một hàm nhỏ cho một mục đích cụ thể, không muốn làm dài code bằng cách định nghĩa hàm def riêng biệt.

Dễ dàng sử dụng với Hàm bậc cao

Lambda function là lựa chọn lý tưởng khi bạn cần truyền một hàm làm đối số cho các hàm bậc cao như map(), filter(), sorted(), reduce(). Đây là trường hợp sử dụng phổ biến và hiệu quả nhất.

XEM THÊM:  Kế thừa là gì? Lợi ích & 4+ Loại hình kế thừa trong lập trình

Khả năng định nghĩa hàm ngay tại chỗ giúp code logic mạch lạc hơn, không cần “nhảy” đến một vị trí khác để xem hàm được truyền vào làm gì.

Lợi ích và hạn chế của hàm ẩn danh Lambda
Lợi ích và hạn chế của hàm ẩn danh Lambda

Hạn chế của hàm ẩn danh Lambda

Giới hạn một biểu thức

Nhược điểm cốt lõi của hàm lambda là nó chỉ được phép chứa duy nhất một biểu thức. Điều này hạn chế khả năng thực hiện các logic phức tạp cần nhiều bước hoặc nhiều câu lệnh.

Bạn không thể bao gồm các câu lệnh gán, điều kiện if/else, vòng lặp for/while, hay xử lý ngoại lệ try/except trực tiếp bên trong thân hàm lambda.

Khó đọc khi quá phức tạp

Mặc dù cú pháp ngắn gọn là lợi ích, nhưng nếu biểu thức bên trong lambda trở nên quá dài hoặc lồng ghép nhiều logic, nó có thể làm giảm tính dễ đọc của code một cách đáng kể.

Thiếu tên gọi rõ ràng cũng là một yếu tố khiến hàm lambda khó hiểu hơn so với hàm def khi đọc lại code phức tạp sau này, trừ khi mục đích của nó rất rõ ràng trong ngữ cảnh sử dụng.

Khó debug hơn

Khi gặp lỗi bên trong một hàm lambda, thông báo lỗi (traceback) thường hiển thị tên hàm là ‘<lambda>’, điều này làm cho việc xác định chính xác vị trí và nguyên nhân lỗi trở nên khó khăn hơn so với khi debug một hàm def có tên.

Việc chỉ có một biểu thức cũng có thể khiến việc cô lập lỗi khó khăn hơn nếu biểu thức đó phức tạp.

Tóm lại, hàm lambda là công cụ hữu ích cho sự ngắn gọn và các tác vụ đơn giản, đặc biệt khi làm việc với hàm bậc cao. Tuy nhiên, với logic phức tạp, cần dễ đọc hoặc debug, hàm def là lựa chọn tốt hơn.

Sự khác biệt giữa hàm lambda và def từ khóa

Điểm khác biệt cơ bản nhất giữa hàm lambda và hàm bạn tạo bằng từ khóa def trong Python nằm ở cú pháp, cách sử dụng tên gọi và khả năng chứa các câu lệnh phức tạp bên trong. Nắm rõ điều này giúp bạn chọn đúng loại hàm cho từng trường hợp.

Trong khi hàm def được dùng để định nghĩa các khối mã có thể thực hiện nhiều thao tác và được đặt tên để tái sử dụng, hàm lambda tập trung vào sự ngắn gọn cho các chức năng đơn giản.

Tên gọi

Hàm được định nghĩa bằng def luôn có một tên duy nhất theo sau từ khóa def. Tên này dùng để gọi hàm khi cần thực thi và giúp mô tả mục đích của hàm trong code.

Ngược lại, hàm lambda là “ẩn danh”, tức là nó không có tên. Khi bạn định nghĩa một hàm lambda, nó trả về một đối tượng hàm mà thường bạn sẽ gán cho một biến hoặc truyền trực tiếp vào một hàm khác.

Cú pháp định nghĩa

Cú pháp của hàm def bắt đầu với def, sau đó là tên hàm, cặp ngoặc đơn chứa các tham số, dấu hai chấm và thân hàm được thụt lề bên dưới. Thân hàm có thể kéo dài nhiều dòng.

Hàm lambda có cú pháp ngắn gọn hơn đáng kể: chỉ gồm từ khóa lambda, theo sau là các đối số, dấu hai chấm và duy nhất một biểu thức. Toàn bộ định nghĩa nằm gọn trên một dòng.

Nội dung bên trong hàm

Thân của một hàm def có thể chứa bất kỳ loại câu lệnh (statement) nào của Python, bao gồm các câu lệnh gán biến, vòng lặp (for, while), cấu trúc điều kiện (if, elif, else), và cả các lệnh print hoặc raise exception.

Điểm hạn chế lớn nhất của lambda là nó chỉ được phép chứa một biểu thức (expression) duy nhất. Bạn không thể đặt các câu lệnh phức tạp hoặc nhiều dòng logic vào phần biểu thức của hàm lambda.

Xử lý giá trị trả về

Trong hàm def, bạn cần sử dụng từ khóa return một cách rõ ràng để chỉ định giá trị mà hàm sẽ trả về khi kết thúc thực thi. Nếu không có return hoặc return không kèm giá trị, hàm sẽ trả về None.

XEM THÊM:  Scikit-learn là gì? Ứng dụng, xu hướng Scikit-learn trong AI/ML

Với hàm lambda, giá trị của biểu thức duy nhất mà nó chứa sẽ được tự động trả về. Bạn không cần và không thể sử dụng từ khóa return bên trong định nghĩa lambda.

Lựa chọn giữa lambda và def phụ thuộc vào sự phức tạp của logic bạn cần thực hiện và mức độ cần thiết của việc đặt tên hàm để tái sử dụng.

Ví dụ:

# Using lambda
sq = lambda x: x ** 2
print(sq(3))

# Using def
def sqdef(x):
return x ** 2
print(sqdef(3))

Đầu ra:

9 
9

Như chúng ta có thể thấy trong ví dụ trên, cả hàm sq() và hàm sqdef() đều hoạt động giống nhau và đúng như mong đợi.

Cách sử dụng hàm Lambda

Dưới đây là những kiến ​​thức cơ bản về cách tạo và sử dụng hàm lambda, bao gồm cú pháp và cách sử dụng chúng làm đối số trong các hàm bậc cao như map, filter và reduce.

Ngoài ra, cùng khám phá cách có thể sử dụng hàm lambda trong sắp xếp và trong hiểu biết danh sách để hiểu thêm về cách sử dụng cơ bản của hàm lambda.

Đối số trong các hàm bậc cao ( map, filter, reduce)

Các hàm lambda thường được dùng làm đối số trong các hàm bậc cao hơn như map, filter, và reduce. Các hàm này cho phép bạn áp dụng một phép toán nhất định cho mọi phần tử của danh sách hoặc đối tượng lặp khác.

Ví dụ sử dụng hàm lambda với hàmmap:

numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x**2, numbers))
print(squared_numbers) 

# Output: [1, 4, 9, 16, 25]

Trong ví dụ này, hàm lambda lấy một đầu vào xvà trả về bình phương của giá trị đó. mapHàm áp dụng thao tác này cho mọi phần tử của numbersdanh sách và trả về một danh sách mới với kết quả.

Ví dụ sử dụng hàmfilter:

numbers = [1, 2, 3, 4, 5]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) 

# Output: [2, 4]

Trong ví dụ này, hàm lambda lấy một đầu vào xvà trả về Truenếu xlà chẵn, còn Falsenếu không. filterHàm áp dụng thao tác này cho mọi phần tử của numbersdanh sách và trả về một danh sách mới chỉ có các phần tử trả về True.

Ví dụ sử dụng lambda vớireduce:

Hàm này reducelà hàm bậc cao hơn lấy một hàm nhị phân (hàm lấy hai đối số) và một danh sách. Nó trả về một giá trị duy nhất là kết quả của việc áp dụng hàm nhị phân cho các phần tử của danh sách theo cách tích lũy.

Ví dụ, để tính tích của tất cả các phần tử trong một danh sách, bạn có thể sử dụng đoạn mã sau:

from functools import reduce
numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x*y, numbers)
print(product) 

# Output: 120

Trong ví dụ này, hàm lambda lambda x, y: x*yđược sử dụng như hàm nhị phân trong reducehàm. reduceHàm bắt đầu bằng cách áp dụng hàm nhị phân cho hai phần tử đầu tiên của danh sách, sau đó áp dụng kết quả cho phần tử tiếp theo, và cứ tiếp tục như vậy cho đến khi xử lý xong tất cả các phần tử của danh sách.

Cách sử dụng hàm Lambda
Cách sử dụng hàm Lambda

Trả về hàm dưới dạng giá trị

Bạn cũng có thể sử dụng hàm lambda để trả về hàm dưới dạng giá trị. Ví dụ:

def make_adder(x):
    return lambda y: x + y
add5 = make_adder(5)
print(add5(3)) 

# Output: 8

Trong ví dụ này, make_adderhàm lấy một đầu vào xvà trả về một hàm lambda lấy một đầu vào yvà trả về tổng của xvà y. add5Biến được gán kết quả của lệnh gọi make_adder(5), nghĩa là bây giờ nó tham chiếu đến một hàm lambda cộng 5 vào đầu vào của nó.

Sử dụng hàm lambda trong sắp xếp

Bạn cũng có thể sử dụng hàm lambda trong các hoạt động sắp xếp để chỉ định thứ tự sắp xếp tùy chỉnh. Ví dụ:

numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_numbers = sorted(numbers, key=lambda x: -x)
print(sorted_numbers) 

# Output: [9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]

Trong ví dụ này, hàm lambda lấy một đầu vào xvà trả về -x, nghĩa là thứ tự sắp xếp sẽ theo thứ tự giảm dần. sortedHàm sắp xếp numbersdanh sách dựa trên các giá trị được trả về bởi hàm lambda.

XEM THÊM:  Trừu tượng là gì? 5 phút nắm vững về Abstraction trong OOP

Trường hợp sử dụng hàm Lambda trong Python phổ biến

Bạn nên xem xét sử dụng hàm lambda trong Python khi cần một hàm nhỏ, đơn giản, thực hiện một tác vụ nhanh gọn và thường là khi hàm đó không cần có tên để tái sử dụng ở nhiều nơi trong chương trình.

Hàm lambda đặc biệt hữu ích trong các tình huống mà việc định nghĩa đầy đủ một hàm bằng từ khóa def có vẻ rườm rà hoặc không cần thiết. Chúng giúp làm cho code trở nên cô đọng và dễ đọc hơn tại những điểm sử dụng cụ thể.

Sử dụng với các hàm bậc cao

Trường hợp phổ biến nhất để dùng lambda là khi truyền một hàm làm đối số cho các hàm bậc cao, tức là các hàm nhận hàm khác làm tham số. Các ví dụ điển hình là map(), filter(), và sorted().

Với các hàm này, thay vì phải định nghĩa một hàm def riêng biệt chỉ để dùng một lần duy nhất trong lệnh gọi map, filter hoặc sorted, bạn có thể định nghĩa hàm lambda ngay tại chỗ.

Ví dụ, khi sắp xếp danh sách các từ theo độ dài, bạn dùng sorted với key là lambda từ: len(tu). Lambda này cung cấp nhanh tiêu chí sắp xếp mà không cần hàm def.

Cho các hàm đơn giản, dùng ngay lập tức

Ngay cả ngoài việc kết hợp với hàm bậc cao, lambda cũng hữu ích khi bạn cần một hàm nhỏ thực hiện một phép tính duy nhất và chỉ dùng nó một lần tại một điểm cụ thể trong code.

Thay vì định nghĩa một hàm def chỉ gồm một dòng return, bạn có thể dùng lambda để tạo ra hàm đó một cách trực tiếp và ngắn gọn ngay tại vị trí bạn cần dùng.

Ví dụ, bạn có thể gán hàm lambda tính bình phương lambda x: x * 2 cho một biến và gọi biến đó như một hàm, hoặc dùng nó trong một biểu thức phức tạp hơn.

Tóm lại: Hãy chọn lambda khi hàm bạn cần là một hàm ẩn danh (không cần tên), chỉ chứa một biểu thức duy nhất, và đặc biệt khi nó được dùng làm đối số cho một hàm khác hoặc tại một vị trí duy nhất để làm code gọn hơn.

Tuy nhiên, nếu logic phức tạp hơn một biểu thức, hoặc nếu việc đặt tên cho hàm giúp code dễ đọc hơn hoặc hàm cần được tái sử dụng, hãy dùng hàm def.

Hàm ẩn danh hay Lambda Function là một công cụ mạnh mẽ trong Python cho phép tạo hàm ngắn gọn, không tên, chỉ gồm một biểu thức duy nhất. Chúng ta đã tìm hiểu cú pháp hàm ẩn danh là gì, thấy các ví dụ, phân tích lợi ích và hạn chế, cũng như sự khác biệt cốt lõi so với hàm def. Việc thành thạo cách sử dụng lambda, đặc biệt với các hàm bậc cao, sẽ giúp code Python của bạn trở nên tinh tế và hiệu quả hơn trong nhiều trường hợp.

Khi bạn đã nắm vững các công cụ mạnh mẽ trong Python như hàm lambda và sẵn sàng đưa kiến thức vào thực hành bằng cách xây dựng các ứng dụng web hoặc dịch vụ riêng, bạn sẽ cần một nơi đáng tin cậy để triển khai chúng. Đây chính là lúc dịch vụ thuê VPS trở nên thiết yếu.

Nếu bạn đang tìm kiếm một giải pháp hosting uy tín với chi phí hợp lý cho các dự án Python của mình, InterData cung cấp các gói dịch vụ Thuê VPS giá rẻ chỉ từ 95k/tháng phù hợp cho sinh viên, người mới bắt đầu hoặc các dự án cá nhân. Nhờ đầu tư vào phần cứng thế hệ mới, sử dụng CPU AMD EPYC hiệu năng cao và SSD NVMe U.2 tốc độ cao. Cấu hình mạnh mẽ này đảm bảo ứng dụng Python của bạn chạy mượt mà.

Ngoài ra, nếu bạn cần môi trường mạnh mẽ hơn, dịch vụ VPS Linux mang lại tính linh hoạt cao, cho phép bạn tùy chỉnh và quản lý server theo ý muốn, cùng với địa chỉ IP riêng. Việc khởi tạo nhanh chóng cũng giúp bạn bắt tay ngay vào dự án mà không chờ đợi.

Để hỗ trợ tốt nhất cho việc phát triển và triển khai code, VPS Linux của InterData được trang bị ổ cứng SSD Enterprise chất lượng cao cùng cấu hình mạnh mẽ, mang lại tốc độ cao và băng thông cao. Nền tảng này hướng tới sự ổn định và uy tín với 99.9% Uptime. Với mức giá rẻ chỉ từ 95K/tháng, đây là lựa chọn hiệu quả chi phí.

Share186Tweet117
Mỹ Y
Mỹ Y

Nguyễn Thị Mỹ Y - Tốt nghiệp chuyên ngành Marketing thương mại với 2+ năm kinh nghiệm trong lĩnh vực Content Công Nghệ và Phần Mềm. Hiện tại, tôi đang đảm nhiệm vị trí Nhân viên Digital Marketing tại InterData - một trong những công ty hàng đầu về giải pháp công nghệ thông tin tại Việt Nam, nơi tôi có cơ hội làm việc với các chuyên gia hàng đầu trong ngành công nghệ thông tin. Với vai trò là một nhân viên Digital Marketing, tôi có cơ hội được tham gia vào các dự án phát triển nội dung chất lượng cao về phần mềm mã nguồn mở, ứng dụng và giải pháp công nghệ hữu ích. Để không ngừng nâng cao chuyên môn, tôi thường xuyên tham gia các buổi workshop, khóa đào tạo chuyên sâu và tự học hỏi các xu hướng mới trong lĩnh vực công nghệ thông tin. Tôi tin rằng việc chia sẻ kiến thức mới mẻ là chìa khóa để xây dựng một cộng đồng công nghệ vững mạnh và phát triển. Với kiến thức chuyên sâu, kinh nghiệm thực tế và tâm huyết với nghề, tôi hy vọng có thể đóng góp một phần nhỏ vào sự phát triển của ngành công nghệ thông tin Việt Nam.

KHUYẾN MÃI NỔI BẬT
VPS InterData tích hợp sẵn n8n
VPS InterData Tích Hợp Sẵn n8n – Cài Đặt Nhanh Trong 1-Click
BÀI VIẾT MỚI NHẤT
AJAX là gì - Lợi ích - Hạn chế & Các công nghệ cấu thành AJAX
AJAX là gì? Lợi ích – Hạn chế & Các công nghệ cấu thành AJAX
CRUD là gì - Tổng quan về CRUD (Create, Read, Update, Delete)
CRUD là gì? Tổng quan về CRUD (Create, Read, Update, Delete)
AI Agent là gì
AI Agent là gì? Khái niệm, Cách hoạt động & Ứng dụng 2025
Closure là gì trong JavaScript - Chi tiết A-Z + Ví dụ dễ hiểu
Closure là gì trong JavaScript? Chi tiết A-Z + Ví dụ dễ hiểu
Hàm ẩn danh (Anonymous Function,Lambda) Cú pháp & Ví dụ dễ hiểu
Hàm ẩn danh (Anonymous Function/Lambda): Cú pháp & Ví dụ dễ hiểu
Giá thuê Hosting 1 năm
Giá thuê Hosting 1 năm: Lợi ích, Các yếu tố ảnh hưởng
Các loại Web Hosting
Các loại Web Hosting phổ biến và hướng dẫn lựa chọn chi tiết
Băng thông Web Hosting
Băng thông Web Hosting là gì? Vai trò, Cách tính & Cách tối ưu
Functional Programming là gì - A-Z về FP code sạch, dễ test
Functional Programming là gì? A-Z về FP code sạch, dễ test

logo interdata

VPĐD: 240 Nguyễn Đình Chính, P.11. Q. Phú Nhuận, TP. Hồ Chí Minh
VPGD: 211 Đường số 5, Lakeview City, An Phú, Thủ Đức, TP. Hồ Chí Minh
MST: 0316918910 – Cấp ngày 28/06/2021 – tại Sở KH và ĐT TP. HCM
Mã ĐDKD: 0001
Điện thoại: 1900.636822
Website: Interdata.vn

DỊCH VỤ

Thuê chỗ đặt máy chủ
Thuê Cloud Server
Thuê Hosting
Thuê máy chủ
Thuê VPS

THÔNG TIN

Blog
Giới thiệu
Liên hệ
Khuyến mãi
Sự kiện

CHÍNH SÁCH

Chính sách bảo hành
Chính sách bảo mật
Chính sách xử lý khiếu nại
Cam kết dịch vụ
Điều khoản sử dụng
GDPR
Hình thức thanh toán
Hướng dẫn thanh toán trên VNPAY
Quy định đổi trả và hoàn trả tiền
Quy định sử dụng tên miền