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_value
Ví 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 + y
Gọ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: 7
Cá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 để gọi hàm đó.
-
Tham số (Parameters): Tên các biến 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ư liệu (Docstring): Một chuỗi được sử dụng để mô tả mục đích và cách sử dụng của một hàm. Tùy chọn.
-
Thân hàm: Một khối thụt lề nơi viết các lệnh mà hàm thực thi.
-
Giá trị trả về: Giá trị được trả về cho người gọi sử dụng câu lệnh
return
. Nếu không córeturn
, giá trịNone
sẽ được trả về mặc đị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 chuẩn để truyền tham số vào hàm.
- Tham số mặc định (Default Arguments): Các tham số có giá trị mặc định có thể được bỏ qua 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"
- Đối số có độ dài thay đổi:
*args
để nhận nhiều đối số vị trí dưới dạng một tuple, và**kwargs
để nhận chúng dưới dạng một dictionary.
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: expression
arguments
: Chỉ định các tham số của hàm. Có thể chỉ định nhiều tham số, phân tách bằng dấu phẩy.expression
: Đây là một biểu thức được tính toán 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: 8
Trong 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: 120
Trong 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 * 2
Kế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.