Đặt tên cho một việc cần dùng lại
Nếu nhiều chỗ cùng cần tính một kết quả, ta có thể viết hàm. Hàm nhận dữ liệu qua tham số, xử lí và trả kết quả để nơi gọi tiếp tục dùng.
Từ định nghĩa đến lời gọi
def định nghĩa hàm; mã trong thân thường chạy khi gọi hàm. Tham số là tên trong định nghĩa, đối số là giá trị truyền ở lời gọi. return kết thúc lần gọi và trả giá trị; print chỉ hiển thị. Hàm không return giá trị rõ ràng sẽ trả None.
Biến gán trong hàm thường là biến cục bộ. Với đối số số nguyên trong ví dụ, gán lại tham số không đổi biến số nguyên ở ngoài. Không mở rộng nhận xét đó thành “hàm không bao giờ làm đổi danh sách được truyền vào”.
Lỗi cú pháp khiến mã không được phân tích đúng; lỗi khi chạy xuất hiện lúc thực hiện; lỗi logic có thể cho kết quả sai dù không báo lỗi.
Theo dõi lời gọi hàm
```python
def gap_doi(x):
return 2 * x
a = 5
b = gap_doi(a + 1)
print(a, b)
```
Đối số a + 1 được tính thành 6 rồi truyền vào x. Hàm trả 12, gán cho b; a vẫn 5. Kết quả in 5 12.
Thử vận dụng
Lệnh nào trả một giá trị để nơi gọi có thể tiếp tục tính toán?
print hiển thị; không thay thế return kết quả.
Đúng: return trả giá trị về nơi gọi.
input đọc dữ liệu, không phải lệnh trả của hàm tự định nghĩa.
pass là lệnh không làm gì.
Lời giải
return chuyển giá trị về nơi gọi và kết thúc lần gọi hiện tại.
Chọn dữ liệu thử có ý nghĩa
Hàm kiểm tra số chẵn cần thử số chẵn, số lẻ và giá trị 0; nếu phạm vi cho số âm thì thử thêm số âm. Nếu mọi dữ liệu thử đều là số chẵn, một hàm luôn trả True cũng vượt qua. Kiểm thử phát hiện lỗi nhưng không tự chứng minh đúng cho mọi dữ liệu.
Ví dụ xem cách làm
Hàm f(x) chỉ có print(x + 1). Gán y = f(2), y là gì và màn hình hiện gì?
Lời giải
Màn hình hiện 3; y là None vì hàm không trả giá trị bằng return. Hai kết quả này nói về hai việc khác nhau.
Ví dụ xem cách làm
Hàm cần trả True với n >= 5 nhưng dùng n > 5. Chọn một dữ liệu thử làm lộ lỗi và nêu kết quả đúng.
Lời giải
Chọn n = 5. Kết quả đúng là True nhưng điều kiện n > 5 cho False. Đây là dữ liệu ngay tại ranh giới.
Những điều cần nhớ
Khi đọc hàm, theo dõi đối số, biến cục bộ và giá trị trả về. Chọn dữ liệu thử theo các trường hợp, nhất là ranh giới của điều kiện.
Đang học