Bài 8: Hàm (function) trong Python

Bài 7 bạn đã gom dữ liệu bằng dictionary. Giờ ta học cách gom hành động: hàm (function) — một khối lệnh có tên, viết một lần rồi gọi lại nhiều lần. Hàm là bước ngoặt giúp code từ “chạy được” thành “gọn gàng, dễ đọc, dễ sửa”. Cuối bài bạn viết lại chương trình quản lý điểm bằng các hàm sạch sẽ.
⏱️ Cách học bài này (~30 phút): đọc def/tham số/return (10’), tự gõ và chạy các bài thực hành (12’), xem lỗi thường gặp (4’), tự kiểm + lưu code mang về (4’).
Mục tiêu bài học
Sau bài này bạn sẽ:
- Định nghĩa hàm bằng
defvà gọi hàm. - Truyền tham số và lấy kết quả bằng
return. - Phân biệt return và print.
- Dùng tham số mặc định — và tái tổ chức chương trình bằng hàm.
Nội dung: hàm trong Python
1. Định nghĩa & gọi hàm
Dùng def, đặt tên, thân hàm thụt lề:
def chao(ten):
print(f"Xin chào, {ten}!")
chao("Lan") # gọi hàm → Xin chào, Lan!
chao("Nam") # gọi lại, không cần viết lại code
ten là tham số — dữ liệu bạn truyền vào mỗi lần gọi.
2. return — trả kết quả về
print chỉ hiển thị; return trả giá trị để dùng tiếp:
def tinh_tong(a, b):
return a + b
kq = tinh_tong(2, 3) # lấy kết quả vào biến
print(kq) # 5
print(tinh_tong(10, 5) * 2) # dùng trực tiếp → 30
⚠️ return ≠ print. Hàm chỉ
return.
3. Tham số mặc định
Gán sẵn giá trị cho tham số khi không truyền:
def chao(ten, loi="Xin chào"):
print(f"{loi}, {ten}!")
chao("Lan") # Xin chào, Lan!
chao("Nam", "Chào buổi sáng") # Chào buổi sáng, Nam!
Code mẫu có chú thích: quản lý điểm bằng hàm
Tái tổ chức chương trình điểm (Bài 4–5) thành các hàm gọn:
def xep_loai(diem):
if diem >= 8:
return "Giỏi"
elif diem >= 6.5:
return "Khá"
elif diem >= 5:
return "Trung bình"
return "Yếu"
def trung_binh(ds):
return sum(ds) / len(ds) # sum() cộng cả danh sách
diem_list = [8, 6.5, 9, 4]
tb = trung_binh(diem_list)
print(f"Trung bình: {tb:.2f}") # Trung bình: 6.88
print(f"Xếp loại: {xep_loai(tb)}") # Xếp loại: Khá
Mấu chốt: mỗi hàm làm một việc rõ ràng (xep_loai, trung_binh), có return để dùng kết quả, và tái dùng được ở bất cứ đâu.
Bài thực hành code (tự gõ)
Bài 1 — Hàm chào: viết def chao(ten) in “Xin chào, <tên>!”, rồi gọi với 2 tên khác nhau.
Bài 2 — Hàm tính diện tích: viết def dien_tich(dai, rong) trả về dài × rộng; in diện tích hình 5×3.
✅ Gợi ý: dùng return, rồi print(dien_tich(5, 3)).
Bài 3 — Tham số mặc định: viết def tinh_thue(gia, thue=0.1) trả về tiền thuế; gọi một lần dùng mặc định, một lần truyền thue=0.08.
Lỗi thường gặp & cách sửa
- Quên
return→ hàm trả vềNone;kq = ham()ra None. Cần kết quả thì phảireturn. - Nhầm return với print → in ra thì thấy, nhưng
kq = ham()không dùng được. Xem lại mục 2. - Sai số/thứ tự tham số →
dien_tich(5, 3)khácdien_tich(3, 5)nếu bạn hiểu nhầm vai trò; đặt tên tham số rõ ràng. IndentationError→ thân hàm phải thụt lề 4 dấu cách (xem Bài 4).- Tham số mặc định phải đứng sau tham số thường:
def f(a, b=1)đúng,def f(a=1, b)lỗi.
💾 Mang về — bộ hàm quản lý điểm
Lưu vào kho code cá nhân (bài L8 trong series). (Ở đây gộp if điều_kiện: return ... trên một dòng cho gọn — Python cho phép, tương đương cách viết xuống dòng ở trên.)
# ham_diem.py — quản lý điểm bằng hàm
def xep_loai(diem):
if diem >= 8: return "Giỏi"
elif diem >= 6.5: return "Khá"
elif diem >= 5: return "Trung bình"
return "Yếu"
def trung_binh(ds):
return sum(ds) / len(ds) if ds else 0 # tránh chia 0
diem = [8, 6.5, 9, 4]
tb = trung_binh(diem)
print(f"TB: {tb:.2f} | Xếp loại: {xep_loai(tb)}")
Thuật ngữ chốt
| Thuật ngữ | Giải thích ngắn |
|---|---|
| def | Từ khoá định nghĩa hàm |
| tham số (parameter) | Biến nhận dữ liệu truyền vào hàm |
| đối số (argument) | Giá trị thực truyền vào khi gọi hàm |
| return | Trả giá trị ra khỏi hàm để dùng tiếp |
| tham số mặc định | Giá trị gán sẵn khi không truyền |
| gọi hàm (call) | Chạy hàm bằng tên_hàm(...) |
Tự kiểm tra & lời giải
defdùng để làm gì? (Đáp án: định nghĩa một hàm)- Hàm không có
returntrả về gì? (Đáp án:None) returnkhácprintở đâu? (Đáp án: return trả giá trị để dùng tiếp; print chỉ hiển thị)
Lời giải Bài thực hành:
# Bài 1
def chao(ten):
print(f"Xin chào, {ten}!")
chao("Lan"); chao("Nam")
# Bài 2
def dien_tich(dai, rong):
return dai * rong
print(dien_tich(5, 3)) # 15
# Bài 3
def tinh_thue(gia, thue=0.1):
return gia * thue
print(tinh_thue(100000)) # 10000.0 (mặc định 0.1)
print(tinh_thue(100000, 0.08)) # 8000.0
Ghi nhớ nhanh
- Định nghĩa:
def ten_ham(tham_so):+ thân thụt lề; gọi:ten_ham(...). returnđể lấy kết quả dùng tiếp;printchỉ hiển thị.- Mỗi hàm làm một việc rõ; tham số mặc định đứng sau tham số thường.
👉 Bài tập về nhà: gộp chương trình đếm từ (Bài 3) thành một hàm dem_tu(cau) trả về số từ, rồi gọi thử. Bài tiếp theo trong series: Bài 9 — Xử lý lỗi try/except (sắp đăng).
Câu hỏi thường gặp
Hàm (function) trong Python là gì và để làm gì?
Hàm là một khối lệnh được đặt tên để tái sử dụng: viết một lần, gọi nhiều lần. Bạn định nghĩa bằng từ khoá def, truyền dữ liệu vào qua tham số, và lấy kết quả ra bằng return. Hàm giúp code gọn, dễ đọc, dễ sửa — thay vì copy cùng một đoạn lệnh ở nhiều nơi, bạn gói nó vào một hàm và gọi khi cần.
return và print khác nhau thế nào?
print chỉ HIỂN THỊ ra màn hình cho người xem, còn return TRẢ giá trị về để chương trình dùng tiếp (gán vào biến, tính toán). Ví dụ hàm có return cho phép bạn viết ‘kq = tinh_tong(2,3)’ rồi dùng kq. Nếu chỉ print, bạn không lấy lại được kết quả để xử lý. Người mới hay nhầm hai cái này.
Tham số mặc định (default) trong hàm là gì?
Là giá trị gán sẵn cho tham số khi người gọi không truyền vào. Ví dụ def chao(ten, loi=‘Xin chào’) — nếu gọi chao(‘Lan’) thì loi tự là ‘Xin chào’. Tham số mặc định giúp hàm linh hoạt: dùng nhanh với giá trị thường gặp, mà vẫn cho phép đổi khi cần.
Thợ code chính hiệu, thích dắt người mới qua mấy đoạn 'khó nhằn' bằng giọng nhẹ tênh. Châm ngôn: cứ làm dự án thật, sai thì sửa, vui là chính.
Bài liên quan

Tự học lập trình từ con số 0: lộ trình cho người mới
Muốn tự học lập trình nhưng không biết bắt đầu từ đâu? Đây là lộ trình từ con số 0 theo từng giai đoạn — chọn ngôn ngữ, học nền tảng, làm dự án, và tránh những cái bẫy khiến người mới bỏ cuộc.

Bài 6: CSS — bố cục với Flexbox
Bài 6 series Web cơ bản (bài học 30 phút): dùng Flexbox để xếp các khối thành hàng, căn giữa và chia đều khoảng cách — biến trang cá nhân thành có bố cục thật; kèm thực hành và file mang về.

Bài 7: Dictionary trong Python
Bài 7 series Python cho người mới (bài học 30 phút): làm chủ dictionary (từ điển) — lưu dữ liệu theo cặp khóa–giá trị — qua một chương trình danh bạ điện thoại tự viết; kèm bài tập và code mang về.