Đó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ả:

28800

5. 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_daystham số (parameter) ➜ đại diện cho dữ liệu đầu vào
  • 35, 100đố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út

8. 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út

10. 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:

  1. Nhận số giờ
  1. Chuyển thành giây
  1. 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)