
Đóng gói Logic bằng Hàm trong Python (Encapsulate Logic with Functions)
Mục tiêu bài học
Sau bài học này, bạn sẽ nắm được:
- Hàm (function) là gì và tại sao nên dùng hàm
- Cách định nghĩa hàm (
def)
- Hiểu khái niệm gọi hàm (function call)
- Cách sử dụng tham số (parameters) và đối số (arguments)
- Tránh trùng lặp code nhờ hàm
- Ví dụ thực tế trong Python
1. Vấn đề: Tại sao cần dùng hàm?
Khi viết code, bạn có thể gặp trường hợp nhiều dòng code giống nhau chỉ khác một giá trị nhỏ. Ví dụ:
print(20 * 24 * 60)
print(35 * 24 * 60)
print(100 * 24 * 60)→ Ở đây bạn phải lặp lại cùng một công thức nhiều lần.
→ Nếu cần sửa công thức, bạn phải sửa ở nhiều dòng ➜ dễ lỗi.
Giải pháp: Dùng hàm để đóng gói logic, viết một lần, dùng nhiều lần.
2. Hàm là gì?
Hàm (function) là một khối lệnh có thể được tái sử dụng.
Một hàm:
- chứa nhiều dòng logic
- giúp tránh lặp code
- giúp code gọn gàng, dễ bảo trì
- có thể nhận dữ liệu đầu vào (parameters)
3. Cách định nghĩa một hàm
Cú pháp:
def ten_ham():
# bên trong là khối lệnh (code block)Ví dụ: tạo hàm days_to_units
def days_to_units():
print(20 * 24 * 60)Giải thích:
def➜ từ khóa dùng để khai báo hàm
days_to_units➜ tên hàm, mô tả nhiệm vụ
()➜ phần để chứa tham số
:➜ báo hiệu bắt đầu khối lệnh
- Code bên trong phải thụt lề (indent)
4. Định nghĩa hàm ≠ chạy hàm
Nếu bạn chỉ viết:
def days_to_units():
print(20 * 24 * 60)Python không chạy hàm này cho đến khi bạn gọi nó.
Gọi hàm:
days_to_units()Kết quả:
288005. Vấn đề: Hàm trên chỉ dùng cho giá trị 20 ngày
Chúng ta muốn xử lý các số ngày khác nhau (35, 100…).
→ Cần dùng tham số.
6. Tham số và đối số (Parameters & Arguments)
Định nghĩa hàm có tham số:
def days_to_units(num_days):
print(num_days * 24 * 60)Gọi hàm với đối số:
days_to_units(35)
days_to_units(100)Kết quả:
50400
144000
Giải thích:
num_dayslà tham số (parameter) ➜ đại diện cho dữ liệu đầu vào
35,100là đối số (argument) ➜ giá trị thật ta truyền vào
7. Ví dụ đầy đủ – chuyển đổi ngày sang phút
def days_to_units(num_days):
minutes = num_days * 24 * 60
print(f"{num_days} ngày = {minutes} phút")days_to_units(3)
days_to_units(7)Kết quả:
3 ngày = 4320 phút
7 ngày = 10080 phút8. Lỗi khi thiếu tham số
Nếu bạn làm:
days_to_units()Python báo lỗi:
TypeError: days_to_units() missing 1 required positional argument: 'num_days'→ Nghĩa là: bạn phải truyền giá trị vào vì hàm yêu cầu tham số.
9. Hàm nhiều tham số
Bạn có thể thêm bao nhiêu tham số tùy thích.
Ví dụ: thêm một tham số thông điệp
def days_to_units(num_days, message):
minutes = num_days * 24 * 60
print(f"{message}: {num_days} ngày = {minutes} phút")Gọi hàm:
days_to_units(5, "Kết quả chuyển đổi")Kết quả:
Kết quả chuyển đổi: 5 ngày = 7200 phút10. Tổng kết kiến thức (Bullet Points)
Ưu điểm khi dùng hàm:
- Tránh lặp code
- Dễ bảo trì hơn
- Tăng tính tổ chức cho chương trình
- Tái sử dụng logic ở nhiều nơi
- Code rõ ràng, dễ đọc hơn
Ghi nhớ:
- Dùng
defđể khai báo hàm
- Hàm phải được gọi thì mới chạy
- Tham số nằm trong dấu ngoặc
()
- Đối số là giá trị truyền vào khi gọi hàm
- Indentation (thụt lề) là bắt buộc
Bài tập thực hành (có đáp án)
Bài tập:
Hãy viết hàm:
- Nhận số giờ
- Chuyển thành giây
- In kết quả
Gợi ý:
- Công thức:
hours * 60 * 60
Đáp án:
def hours_to_seconds(hours):
seconds = hours * 60 * 60
print(f"{hours} giờ = {seconds} giây")
hours_to_seconds(2)
hours_to_seconds(10)