Tìm hiểu chi tiết về các hàm trong Python cho người mới bắt đầu
Tìm hiểu đầy đủ về các hàm trong Python — nền tảng giúp bạn tối ưu code và phát triển ứng dụng hiệu quả. Hướng dẫn dễ hiểu, phù hợp cho người mới học
Nội dung bài viết
Nếu bạn đang bắt đầu làm quen với lập trình, việc hiểu rõ các hàm trong Python là bước quan trọng để viết code hiệu quả và dễ bảo trì. Hàm giúp chia nhỏ chương trình thành các phần logic rõ ràng, dễ đọc và tái sử dụng. Dù là người mới học hay đã có kinh nghiệm, việc nắm vững cách định nghĩa, sử dụng và tối ưu hàm sẽ giúp bạn nâng tầm kỹ năng lập trình Python nhanh chóng.
1. Cấu trúc cơ bản của một hàm Python
Các hàm trong Python được xây dựng dựa trên một cấu trúc đơn giản nhưng mạnh mẽ, giúp tổ chức code một cách hiệu quả và dễ tái sử dụng. Hiểu rõ cấu trúc này là bước đầu tiên để làm chủ việc lập trình hàm.
Cấu trúc cơ bản của một hàm Python bao gồm bốn thành phần chính:
1.1 Từ khóa def
Mọi định nghĩa hàm trong Python đều bắt đầu bằng từ khóa def (viết tắt của define). Đây là tín hiệu cho trình thông dịch Python biết rằng bạn sắp khai báo một hàm mới.
- Tên hàm (Function Name)
Ngay sau def là tên bạn đặt cho hàm.
- Quy tắc: Tên hàm phải tuân theo quy tắc đặt tên biến (chỉ chứa chữ cái, số và dấu gạch dưới _, không bắt đầu bằng số).
- Quy ước (PEP 8): Nên sử dụng chữ cái thường và tách các từ bằng dấu gạch dưới (ví dụ: tinh_tong, kiem_tra_so_chan). Tên hàm nên thể hiện rõ chức năng của nó.
- Danh sách tham số (Parameters)
Phần này nằm trong cặp dấu ngoặc đơn (), ngay sau tên hàm.
- Chức năng: Đây là nơi bạn khai báo các biến (tham số) mà hàm cần nhận giá trị đầu vào để xử lý.
- Trường hợp:
- Nếu hàm không cần đầu vào, bạn vẫn phải giữ cặp dấu ngoặc đơn rỗng: def in_loi_chao():
- Nếu hàm có đầu vào, các tham số được liệt kê và phân cách bằng dấu phẩy: def tinh_tong(so_a, so_b):
- Khối lệnh và Lệnh return
Toàn bộ khối lệnh của hàm được viết sau dấu hai chấm : và phải được thụt lề (thường là 4 dấu cách). Sự thụt lề này là cách Python định nghĩa phạm vi (scope) của hàm.
- Nội dung: Chứa các logic tính toán, xử lý dữ liệu.
- Lệnh return (Tùy chọn): Lệnh này được sử dụng để trả về một giá trị nào đó từ hàm cho phần code đã gọi nó. Nếu hàm không có lệnh return rõ ràng, nó sẽ tự động trả về giá trị đặc biệt là None.
Cú pháp tổng quát:
Python
def ten_ham(tham_so_1, tham_so_2, ...):
"""
Docstring: Giải thích chức năng của hàm
"""
# Khối lệnh xử lý
ket_qua = tham_so_1 + tham_so_2
return ket_qua # Trả về kết quả
Ví dụ thực:
def tinh_tong(a, b):
"""
Hàm tính tổng hai số.
Tham số:
a (int/float): số thứ nhất
b (int/float): số thứ hai
Trả về:
int/float: tổng a + b
"""
tong = a + b
return tong
2. Các hàm trong Python cơ bản
Trong phần này, chúng ta sẽ xem xét các hàm trong Python để hiểu cách sử dụng chúng hiệu quả trong thực tế..
2.1 Hàm có tham số
Hàm có tham số là hàm nhận dữ liệu đầu vào để xử lý. Tham số giúp hàm linh hoạt và tái sử dụng được cho nhiều tình huống khác nhau.
Các kiểu tham số thường gặp:
- Positional parameters (tham số vị trí): Truyền giá trị theo thứ tự.
- Keyword parameters (tham số theo tên): Truyền giá trị theo tên tham số, không phụ thuộc thứ tự.
- Default parameters (tham số mặc định): Có giá trị mặc định nếu người dùng không truyền.
- *args: Nhận nhiều tham số dạng tuple.
- **kwargs: Nhận nhiều tham số dạng dict (key=value).
Ví dụ minh họa:
def thong_tin_nguoi(ten, tuoi=18, *so_thich, **thong_tin_khac):
print(f"Tên: {ten}, Tuổi: {tuoi}")
if so_thich:
print("Sở thích:", so_thich)
if thong_tin_khac:
print("Thông tin khác:", thong_tin_khac)
thong_tin_nguoi("An", 25, "đọc sách", "bóng đá", email="an@example.com")
Lưu ý khi dùng tham số:
- Đặt tham số mặc định ở phía sau các tham số không mặc định.
- Tránh dùng giá trị mutable (list, dict) làm giá trị mặc định để né lỗi chia sẻ trạng thái.
- Sử dụng *args và **kwargs khi không biết trước số lượng tham số.
2.2 Hàm không có tham số
Hàm không có tham số là hàm thực hiện tác vụ cố định, không cần dữ liệu bên ngoài. Thường dùng cho hành động độc lập như in thông báo, khởi tạo trạng thái hoặc test.
Ví dụ:
def hello():
print("Xin chào, chào mừng bạn đến với Python!")
hello()
Khi nào dùng hàm không tham số:
- Hàm thực hiện tác vụ có thể lặp lại mà không cần biến đầu vào (ví dụ: in menu, chạy demo).
- Khi hàm thao tác với dữ liệu toàn cục (cần cẩn trọng) hoặc truy xuất tài nguyên bên ngoài (file, API) mà không cần tham số.
2.3 Hàm có giá trị trả về (return)
return dùng để trả kết quả từ hàm về vị trí gọi hàm. Nếu không có return, hàm trả về None:
- return có thể trả về một giá trị đơn, nhiều giá trị (thực chất là tuple), hoặc cấu trúc phức tạp (list, dict...).
- return kết thúc thực thi hàm ngay lập tức — các dòng sau return sẽ không chạy.
- Trả về rõ ràng giúp hàm dễ kiểm thử và kết hợp trong biểu thức.
Ví dụ trả về một giá trị:
def tinh_tong(a, b):
return a + b
kq = tinh_tong(3, 5) # kq = 8
Ví dụ trả về nhiều giá trị:
def chia_va_du(a, b):
return a // b, a % b # trả về tuple (quotient, remainder)
thuong, du = chia_va_du(7, 3) # thuong = 2, du = 1
Gợi ý:
- Luôn xác định rõ kiểu dữ liệu trả về (có thể dùng type hints: -> int).
- Tránh trả về nhiều kiểu khác nhau từ cùng một hàm (ví dụ sometimes int, sometimes None) — dễ gây lỗi.
- Sử dụng return sớm (early return) để giảm độ lồng điều kiện và tăng tính rõ ràng.
Xem thêm:
- Các dạng Toán Tử Trong Python quan trọng mà bạn cần nắm
- Hướng Dẫn Từ A Đến Z Về Các Kiểu Dữ Liệu Trong Python
3. Hàm nâng cao trong Python
Khi bạn đã nắm vững các hàm cơ bản, việc tìm hiểu về các hàm trong Python ở cấp độ nâng cao sẽ giúp bạn viết mã linh hoạt, ngắn gọn và hiệu quả hơn. Ba khái niệm quan trọng trong nhóm này gồm: hàm ẩn danh (lambda), hàm đệ quy, và hàm lồng nhau (nested function).
3.1 Hàm ẩn danh (lambda function)
Hàm ẩn danh trong Python, còn gọi là lambda function, là hàm không có tên, được định nghĩa nhanh bằng cú pháp ngắn gọn. Lambda thường dùng cho các tác vụ nhỏ, một lần, hoặc truyền vào hàm khác như map(), filter() hay sorted().
Cú pháp:
lambda [tham_số]: [biểu_thức]
Ví dụ:
# Tính bình phương của một số
binh_phuong = lambda x: x ** 2
print(binh_phuong(5)) # Kết quả: 25
# Dùng trong hàm map để tăng mỗi phần tử trong danh sách lên 2
numbers = [1, 2, 3, 4]
result = list(map(lambda n: n + 2, numbers))
print(result) # [3, 4, 5, 6]
Khi nên dùng lambda:
- Khi hàm chỉ có một biểu thức duy nhất.
- Khi cần truyền hàm làm đối số cho hàm khác (functional programming).
- Không nên dùng lambda cho logic phức tạp vì gây khó đọc, nên thay bằng def.
3.2 Hàm đệ quy
Hàm đệ quy là hàm tự gọi lại chính nó để giải quyết bài toán bằng cách chia nhỏ thành các bài toán con. Đệ quy mạnh mẽ nhưng cần hiểu kỹ để tránh lỗi vòng lặp vô tận.
Khi nào nên dùng hàm đệ quy:
- Khi bài toán có cấu trúc lặp lại như cây, đồ thị, hoặc tính toán phân nhánh.
- Khi muốn diễn đạt ý tưởng thuật toán ngắn gọn và trực quan hơn vòng lặp.
Ví dụ: tính giai thừa bằng đệ quy
def giai_thua(n):
if n == 0 or n == 1:
return 1
return n * giai_thua(n - 1)
print(giai_thua(5)) # Kết quả: 120
Nguyên tắc khi viết hàm đệ quy:
- Luôn có điều kiện dừng (base case).
- Mỗi lần gọi lại hàm phải tiến gần hơn tới điều kiện dừng.
- Hạn chế độ sâu của đệ quy vì Python có giới hạn (thường 1000 cấp).
3.3 Hàm lồng nhau (nested function)
Hàm lồng nhau là hàm được định nghĩa bên trong một hàm khác, giúp ẩn logic nội bộ và giới hạn phạm vi biến.
Ví dụ:
def ngoai():
def trong():
print("Đây là hàm bên trong!")
trong()
ngoai()
Ứng dụng của hàm lồng nhau:
- Ẩn chi tiết triển khai: chỉ để sử dụng nội bộ, không bị lộ ra bên ngoài.
- Tạo closure: giúp lưu lại trạng thái của biến trong hàm cha.
Như vậy, việc thành thạo các hàm trong Python không chỉ giúp bạn viết chương trình ngắn gọn, logic hơn mà còn mở ra khả năng giải quyết các bài toán phức tạp một cách tinh gọn và chuyên nghiệp.
Nếu bạn muốn rèn luyện kỹ năng Python từ cơ bản đến nâng cao, hãy tham gia ngay các khóa học Python tại Học viện MCI — nơi bạn được hướng dẫn bài bản, thực hành thực tế và cập nhật xu hướng lập trình hiện đại để sẵn sàng cho mọi cơ hội nghề nghiệp trong tương lai.
Thông tin liên hệ:
- Website: https://www.mcivietnam.com/
- Tư vấn khóa học: 0352.433.233
- Tư vấn đào tạo doanh nghiệp: 0352.433.233
- CSKH: cskh@mcivietnam.com

Các khóa học
- Mastering AWS : From Basics to Applications Specialized
- Data Engineer Track Specialized
- Combo Data Engineering Professional Hot
- AI & DASHBOARD – CHỈ 990K Hot
- Combo Python Level 1 & Level 2 Bestseller
- Business Intelligence Track Hot
- Data Science Track Bestseller
- Data Analyst Professional (Data Analyst with Python Track) Bestseller
- RPA UiPath Nâng Cao: Chiến Thuật Automation Cho Chuyên Gia Specialized
- RPA UiPath cho Người Mới Bắt Đầu: Thành Thạo Automation Chỉ Trong 1 Ngày Specialized
- Business Analyst Fast Track Bestseller
- Business Analyst Bestseller
Đăng ký tư vấn khóa học
*Vui lòng nhập số điện thoại của bạn
*Vui lòng nhập họ tên của bạn
*Vui lòng chọn giới tính
*Vui lòng chọn 1 trường