tinbc tinbc

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

Thợ Code5 phút đọc
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 defgọi hàm.
  • Truyền tham số và lấy kết quả bằng return.
  • Phân biệt returnprint.
  • 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

tentham 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ỉ print thì không lấy lại được kết quả để tính tiếp. Cần dùng kết quả → phải 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ải return.
  • 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ác dien_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

  1. def dùng để làm gì? (Đáp án: định nghĩa một hàm)
  2. Hàm không có return trả về gì? (Đáp án: None)
  3. return khác print ở đâ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; print chỉ 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).

Chia sẻ:
0.0 0 lượt đánh giá

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

Thợ Code

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
Lập trình

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
Lập trình

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
Lập trình

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ề.