Tin Học KHMT
Ôn tập Tin học THPT › Tin học 10 › Bài 31
Tin học 10

Bài 31. Truyền tham số vào hàm và nhận giá trị trả về

Ta đã biết cách viết def và biết rằng phải gọi thì hàm mới chạy. Bài này đi sâu vào phần cốt lõi hơn: dữ liệu được truyền vào hàm theo cơ chế nào, và kết quả được trả về cho nơi gọi ra sao qua lệnh return.

Chủ đề F · Lập trình, Thuật toán & CTDL (KHMT) - đọc khoảng 12 phút · 24 câu luyện tập trong ứng dụng

Tương ứng sách giáo khoa
  • Cánh DiềuTin học 10 - Chủ đề F · Bài 11. Thực hành lập trình với hàm và thư việntr. 92
  • Kết nối tri thứcTin học 10 - Bài 27. Tham số của hàmtr. 131–135
Xem bảng đối chiếu cả bộ →

Bắt đầu bằng một hình dung

Giờ ra chơi, căng tin trường vừa mở thêm một quầy nước ép. Trên mặt quầy đặt sẵn một xấp phiếu gọi món in sẵn ba ô trống theo đúng thứ tự: loại quả, mức đá, mức đường. Ba ô trống ấy lúc nào cũng nằm đó chờ người mua điền vào; bản thân tờ phiếu chưa nói gì về một ly nước cụ thể cả.

Bạn Minh cầm một tờ, điền vào ba ô: ổi, ít đá, ngọt vừa. Bạn Hà cầm tờ khác, điền: cam, nhiều đá, ít ngọt. Cùng một mẫu phiếu, cùng ba ô trống ấy, nhưng vì những thứ điền vào khác nhau nên hai ly nước nhận về cũng khác nhau hoàn toàn. Quan trọng là phải điền đúng ô: nếu Minh lỡ viết "ít đá" vào ô mức đường thì ly nước pha ra sẽ chẳng giống điều bạn muốn chút nào.

Quầy còn một quy ước rất tiện: ai bỏ trống ô mức đường thì nhân viên tự hiểu là ngọt vừa. Nhờ vậy người đang vội chỉ cần ghi loại quả là xong. Và nếu sợ nhầm ô, bạn được phép ghi kèm tên ô ngay trước nội dung, kiểu "đường: ít" - khi đó dù viết ở dòng nào, nhân viên vẫn hiểu đúng ý bạn.

Cuối cùng, hãy để ý hai kiểu quầy khác nhau trong sân trường. Quầy thứ nhất pha xong thì đưa ly nước tận tay bạn: bạn cầm về lớp, chia cho bạn bè, làm gì tuỳ ý. Quầy thứ hai chỉ viết tên món lên tấm bảng treo trước quầy cho cả căng tin cùng đọc rồi thôi - bạn nhìn thấy dòng chữ đó, nhưng tay vẫn trắng, chẳng có gì để mang đi đâu cả. Hai kiểu quầy này chính là hình ảnh của hai loại công việc mà chúng ta sắp bàn tới.

Nội dung bài học

  1. 1) Tham số và đối số - hai vai trò khác nhau
  2. 2) Gọi theo tên tham số và tham số có giá trị mặc định
  3. 3) Lệnh return: dừng hàm ngay và trả kết quả cho nơi gọi
  4. 4) Trả về nhiều giá trị cùng lúc và gọi lồng hàm

Tóm tắt lý thuyết cần nhớ

  • Tham số là tên viết trong dòng def, đóng vai trò chỗ trống; đối số là giá trị thật truyền vào lúc gọi hàm, và được gán lần lượt cho các tham số theo đúng thứ tự viết.
  • Gọi hàm phải đủ số lượng đối số, thiếu hay thừa đều báo lỗi ngay; đảo thứ tự hai đối số thường cho kết quả sai mà máy không báo gì.
  • Truyền theo tên (ten_tham_so=gia_tri) giúp lời gọi không phụ thuộc thứ tự, còn tham số có giá trị mặc định trong dòng def sẽ được dùng khi lời gọi bỏ trống tham số đó.
  • return kết thúc hàm ngay lập tức nên mọi lệnh sau nó không chạy, và một hàm được phép có nhiều return ở các nhánh if; hàm chỉ print() mà không có return khi gán vào biến sẽ cho None, còn return a, b cho phép trả về nhiều giá trị rồi nhận lại bằng x, y = ten_ham(...).

Thuật ngữ tiếng Anh trong bài

Tiếng AnhĐọc làNghĩa
functionPHẮNG-sầnhàm
Một 'cỗ máy nhỏ' lắp sẵn để làm một việc cụ thể.
defđépkhai báo hàm (def)
Từ khoá để bắt đầu tạo một hàm mới, như treo tấm bảng 'bắt đầu công thức'.
variableVE-ri-ơ-bồbiến
Một cái hộp có tên, dùng để chứa một giá trị.

Câu hỏi trắc nghiệm có đáp án

Mấy câu mẫu để bạn tự kiểm tra ngay. Trong ứng dụng, bài này có đủ 24 câu, chấm điểm tự động và giải thích từng câu sai.

Câu 1 · Nhận biết
Trong dòng định nghĩa def tinh_tien(so_luong, don_gia):, hai cái tên so_luongdon_gia được gọi là gì?
  1. Đối số của hàm
  2. Giá trị trả về của hàm
  3. Tham số của hàm
  4. Tên của hai hàm con bên trong hàm tinh_tien
Đáp án: C - Những cái tên viết trong cặp ngoặc ở dòng def là tham số - chúng chỉ là chỗ trống dành sẵn, chưa mang giá trị cụ thể nào. Phương án "đối số" sai vì đối số là giá trị thật được đưa vào lúc gọi hàm, ví dụ số 3 và 12000 trong lời gọi tinh_tien(3, 12000). Phương án "giá trị trả về" sai vì giá trị trả về là thứ hàm giao ra cho nơi gọi qua lệnh return, nằm trong thân hàm chứ không phải ở dòng def. Phương án cuối sai vì chúng chỉ là tên biến nhận dữ liệu, hoàn toàn không phải tên hàm.
Câu 2 · Nhận biết
Cho hàm sau. Lệnh print(hieu(3, 10)) in ra kết quả nào?
def hieu(a, b):
    return a - b
  1. -7
  2. 7
  3. 13
  4. Báo lỗi vì kết quả là số âm
Đáp án: A - Các đối số được gán lần lượt theo thứ tự: 3 vào tham số a, 10 vào tham số b, nên hàm tính 3 - 10 và trả về -7. Phương án 7 là kết quả của 10 - 3, tức là hiểu nhầm rằng Python tự sắp xếp cho số lớn trừ số nhỏ - máy không hề làm vậy. Phương án 13 là kết quả của phép cộng, không đúng với lệnh return a - b. Phương án cuối sai vì Python xử lí số âm hoàn toàn bình thường, không có lỗi nào ở đây.
Câu 3 · Thông hiểu
Cho hàm sau. Lời gọi nào dưới đây sẽ làm chương trình BÁO LỖI?
def gia_ve(so_ve, don_gia=25000):
    return so_ve * don_gia
  1. gia_ve(3)
  2. gia_ve(3, 25000)
  3. gia_ve(so_ve=3)
  4. gia_ve(don_gia=3)
Đáp án: D - Phương án gia_ve(don_gia=3) báo lỗi vì tham số so_ve không có giá trị mặc định mà lời gọi lại không cung cấp đối số nào cho nó, nên Python không biết lấy giá trị nào để tính. Ba lời gọi còn lại đều hợp lệ: gia_ve(3) cho so_ve nhận 3 còn don_gia dùng giá trị mặc định 25000; gia_ve(3, 25000) truyền đủ hai đối số theo thứ tự; gia_ve(so_ve=3) truyền theo tên cho so_ve, còn don_gia vẫn lấy mặc định. Cả ba đều cho kết quả 75000.
Câu Đúng/Sai (Phần II) · Thông hiểu
Cho biết mỗi phát biểu sau đúng hay sai:
  • a)Với hàm def dien_tich(dai, rong):, lời gọi dien_tich(5, 8) sẽ gán đối số 5 cho tham số dai và đối số 8 cho tham số rong.Đúng
  • b)Mỗi hàm chỉ được phép chứa duy nhất một lệnh return, nên không thể đặt return ở nhiều nhánh if khác nhau.Sai
  • c)Với hàm def gui_tin(noi_dung, khan=False):, lời gọi gui_tin("Họp lúc 8h") là hợp lệ vì tham số khan đã có giá trị mặc định.Đúng
  • d)Một hàm chỉ dùng print() để hiện kết quả mà không có return vẫn cho phép gán lời gọi vào biến rồi đem biến đó cộng trừ như số bình thường.Sai
Vì sao:
  • (a) Đúng - khi không dùng cách truyền theo tên, các đối số được gán lần lượt cho các tham số theo đúng thứ tự viết, nên 5 vào dai và 8 vào rong.
  • (b) Sai - một hàm được phép có nhiều lệnh return đặt ở các nhánh rẽ khác nhau; mỗi lần chạy hàm chỉ đi theo một nhánh, gặp return nào trước thì trả kết quả và thoát ngay tại đó.
  • (c) Đúng - tham số khan đã có giá trị mặc định là False nên lời gọi có thể bỏ trống nó, khi đó khan tự nhận False; chỉ noi_dung là bắt buộc phải truyền.
  • (d) Sai - hàm không có return sẽ trả về None, gán vào biến thì biến mang giá trị None, và mọi phép cộng trừ với None đều gây lỗi.

Thử ngay: minh hoạ từng bước

Bấm từng bước để tự xem cơ chế hoạt động, hoặc bấm “Tự chạy” cho nó tiến mỗi giây một lần. Đổi được dữ liệu đầu vào - không cần đăng nhập.

Học trọn bài này trong ứng dụng

Bài giảng đầy đủ, 24 câu luyện tập chấm tự động, thi thử đúng cấu trúc đề tốt nghiệp (24 trắc nghiệm + 4 Đúng/Sai), bài thực hành máy tự chấm và gia sư AI giải thích chỗ sai.

Mở bài 31 trong ứng dụng

Phần học miễn phí, không cần tạo tài khoản.