Các hàm trong Python
Bài viết này giải thích về các hàm trong Python.
YouTube Video
Các hàm trong Python
Các hàm trong Python là một tính năng quan trọng để định nghĩa các khối mã có thể tái sử dụng, cho phép bạn tổ chức và đơn giản hóa chương trình bằng cách gọi chúng khi cần thiết. Việc sử dụng các hàm có thể cải thiện khả năng đọc mã và tuân theo nguyên tắc DRY (Don't Repeat Yourself, tránh viết đi viết lại cùng một đoạn mã nhiều lần).
Định nghĩa các hàm
Các hàm được định nghĩa bằng từ khóa def. Cú pháp cơ bản như sau:.
1def function_name(arg1, arg2, ..., argN):
2 """docstring (A brief description of the function)"""
3 processing
4 return return_valueVí dụ, để định nghĩa một hàm cộng hai số, bạn có thể viết như sau:.
1def add(x, y):
2 """A function that adds two numbers and returns the result"""
3 return x + yGọi hàm
Một hàm đã được định nghĩa có thể được gọi và sử dụng như sau:.
1result = add(3, 4)
2print(result) # Output: 7Các thành phần của một hàm
-
Tên hàm
- Tên của hàm, được sử dụng khi gọi hàm đó.
-
Tham số (Parameters)
- Tên của các biến sẽ nhận dữ liệu được truyền vào khi gọi hàm. Bạn có thể định nghĩa không hoặc nhiều tham số.
-
Chuỗi tài liệu (Docstring)
- Một chuỗi mô tả mục đích và cách sử dụng của hàm. Tùy chọn.
-
Thân hàm
- Một khối thụt lề nơi các lệnh sẽ được hàm thực thi được viết.
-
Giá trị trả về
- Giá trị được trả về cho người gọi thông qua câu lệnh
return. Nếu không córeturn, giá trịNonesẽ được trả về mặc định.
- Giá trị được trả về cho người gọi thông qua câu lệnh
Các loại tham số
Trong Python, có một số loại tham số.
- Tham số vị trí (Positional Arguments)
- Cách thông thường để truyền tham số cho một hàm.
- Tham số mặc định (Default Arguments)
- Gán giá trị mặc định cho các tham số để có thể bỏ qua chúng khi gọi hàm.
1def greet(name, message="Hello"):
2 print(f"{message}, {name}")
3
4greet("Alice") # "Hello, Alice"
5greet("Bob", "Good morning") # "Good morning, Bob"- Tham số độ dài biến đổi (Variable-length Arguments)
argsnhận nhiều tham số vị trí dưới dạng tuple, cònkwargsnhận các tham số đó dưới dạng từ điển.
1def func(*args, **kwargs):
2 print("args:", args)
3 print("kwargs:", kwargs)
4
5func(1, 2, 3, a=4, b=5)
6# Output:
7# args: (1, 2, 3)
8# kwargs: {'a': 4, 'b': 5}Bằng cách sử dụng hàm một cách đúng đắn, bạn có thể viết chương trình Python hiệu quả và năng suất hơn.
Hàm Lambda trong Python
Trong Python, các hàm lambda được sử dụng để định nghĩa các hàm ẩn danh, gọn nhẹ. Không giống như các hàm được định nghĩa bằng từ khóa def thông thường, lambda cho phép bạn tạo các hàm ngắn gọn trong một dòng. Ở đây, chúng ta sẽ giải thích chi tiết về các hàm lambda trong Python.
Cơ bản về hàm lambda
Hàm lambda, còn được gọi là hàm ẩn danh, được dùng để định nghĩa các hàm tạm thời không có tên, như chính cái tên của nó gợi ý. Cú pháp cơ bản như sau:.
1lambda arguments: expressiontham số- Chỉ định các tham số của một hàm. Có thể chỉ định nhiều tham số, phân tách bằng dấu phẩy.
biểu thức- Một biểu thức được đánh giá dựa trên các tham số. Kết quả của biểu thức trở thành giá trị trả về của hàm.
Ví dụ, code sau đây định nghĩa và thực thi một hàm lambda để cộng hai số.
1add = lambda x, y: x + y
2print(add(5, 3)) # Output: 8Trong ví dụ này, lambda x, y: x + y là một hàm lambda nhận hai tham số, x và y, và trả về tổng của chúng.
Các trường hợp sử dụng hàm lambda
Hàm lambda hữu ích trong các tình huống mà bạn cần định nghĩa một hàm đơn giản tại chỗ. Chúng đặc biệt phổ biến trong các trường hợp sau đây:.
-
Khi được truyền làm tham số cho các hàm
- Nó hữu ích trong các hàm bậc cao (các hàm nhận các hàm khác làm tham số) khi truyền các hàm ngắn gọn, tạm thời.
-
Khi chỉ định các khóa dùng để sắp xếp danh sách
- Chúng rất tiện lợi khi chỉ định tiêu chí sắp xếp (khóa) trong các hàm như
sort()hoặcsorted().
- Chúng rất tiện lợi khi chỉ định tiêu chí sắp xếp (khóa) trong các hàm như
Ví dụ sử dụng trong các hàm bậc cao
Ví dụ điển hình của các hàm bậc cao bao gồm map(), filter(), và reduce(). Các hàm này nhận các hàm khác làm tham số và áp dụng chúng lên các chuỗi như danh sách.
1numbers = [1, 2, 3, 4, 5]
2squared = list(map(lambda x: x ** 2, numbers))
3print(squared) # Output: [1, 4, 9, 16, 25]Trong ví dụ này, một hàm lambda được truyền vào hàm map() để bình phương mỗi số trong danh sách.
Ví dụ về việc sắp xếp danh sách
Hàm lambda đôi khi có thể được sử dụng để chỉ định một khóa tùy chỉnh khi sắp xếp danh sách. Ví dụ, mã dưới đây sắp xếp một danh sách các bộ giá trị dựa trên phần tử thứ hai.
1pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
2pairs.sort(key=lambda pair: pair[1])
3print(pairs)
4# Output: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]Trong ví dụ này, một hàm lambda được sử dụng để sắp xếp các bộ giá trị dựa trên phần tử thứ hai của chúng (một chuỗi).
filter() và lambda
Hàm filter() được sử dụng để lọc các phần tử trong một danh sách (hoặc một đối tượng lặp khác) dựa trên một điều kiện nhất định.
1numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
2even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
3print(even_numbers) # Output: [2, 4, 6, 8]Trong ví dụ này, các số chẵn trong danh sách được lọc để tạo ra một danh sách mới.
lambda và reduce()
Hàm reduce() được sử dụng để giảm một danh sách thành một giá trị duy nhất. Nó có thể được triển khai dễ dàng bằng cách sử dụng một hàm lambda.
1from functools import reduce
2
3numbers = [1, 2, 3, 4, 5]
4product = reduce(lambda x, y: x * y, numbers)
5print(product) # Output: 120Trong ví dụ này, tất cả các phần tử trong danh sách được nhân lại với nhau để cho ra một kết quả.
Tránh sử dụng các hàm lambda phức tạp
Ưu điểm của các hàm lambda là sự ngắn gọn, nhưng chúng trở nên khó đọc hơn khi được sử dụng để triển khai logic phức tạp. Vì vậy, nên sử dụng chúng cho các thao tác đơn giản có thể biểu diễn trong một dòng. Đối với các thao tác phức tạp, định nghĩa một hàm bằng def sẽ dễ đọc và dễ bảo trì hơn.
Ví dụ, bạn nên tránh sử dụng các hàm lambda phức tạp như dưới đây.
1# Complex and hard-to-read lambda function
2complex_func = lambda x, y: (x * 2 + y) if x > y else (x + y * 2)Trong trường hợp này, tốt hơn là sử dụng một hàm được định nghĩa bằng def, như được minh họa dưới đây.
1def complex_func(x, y):
2 if x > y:
3 return x * 2 + y
4 else:
5 return x + y * 2Kết luận
Các hàm lambda của Python là một công cụ tiện lợi để định nghĩa các hàm tạm thời, ngắn gọn. Chúng thường được sử dụng trong các hàm bậc cao hoặc các thao tác danh sách để định nghĩa ngắn gọn các điều kiện cụ thể. Tuy nhiên, các hàm lambda nên được giới hạn cho các tác vụ đơn giản, trong khi các hàm def được ưa chuộng hơn cho logic phức tạp.
Bạn có thể làm theo bài viết trên bằng cách sử dụng Visual Studio Code trên kênh YouTube của chúng tôi. Vui lòng ghé thăm kênh YouTube.