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.
- 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
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) Tham số và đối số - hai vai trò khác nhau
- 2) Gọi theo tên tham số và tham số có giá trị mặc định
- 3) Lệnh return: dừng hàm ngay và trả kết quả cho nơi gọi
- 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òngdefsẽ được dùng khi lời gọi bỏ trống tham số đó. returnkế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ềureturnở các nhánhif; hàm chỉprint()mà không córeturnkhi gán vào biến sẽ choNone, cònreturn a, bcho phép trả về nhiều giá trị rồi nhận lại bằngx, y = ten_ham(...).
Thuật ngữ tiếng Anh trong bài
| Tiếng Anh | Đọc là | Nghĩa |
|---|---|---|
| function | PHẮNG-sần | hàm Một 'cỗ máy nhỏ' lắp sẵn để làm một việc cụ thể. |
| def | đép | khai 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'. |
| variable | VE-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.
def tinh_tien(so_luong, don_gia):, hai cái tên so_luong và don_gia được gọi là gì?- Đối số của hàm
- Giá trị trả về của hàm
- Tham số của hàm
- Tên của hai hàm con bên trong hàm tinh_tien
print(hieu(3, 10)) in ra kết quả nào?def hieu(a, b):
return a - b
- -7
- 7
- 13
- Báo lỗi vì kết quả là số âm
def gia_ve(so_ve, don_gia=25000):
return so_ve * don_gia
- gia_ve(3)
- gia_ve(3, 25000)
- gia_ve(so_ve=3)
- gia_ve(don_gia=3)
- a)Với hàm
def dien_tich(dai, rong):, lời gọidien_tich(5, 8)sẽ gán đối số 5 cho tham sốdaivà đố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ể đặtreturnở nhiều nhánhifkhác nhau.Sai - c)Với hàm
def gui_tin(noi_dung, khan=False):, lời gọigui_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óreturnvẫ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
- (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.
Phần học miễn phí, không cần tạo tài khoản.
Bài liên quan - Lập trình, Thuật toán & CTDL (KHMT)
Cùng mạch kiến thức với bài này, học nối tiếp cho chắc phần lí thuyết.