Bài 28. Tủ đồ nghề của lập trình viên: nạp và tự tạo thư viện Python
Bài học chỉ ra cách nạp và sử dụng các thư viện có sẵn của Python bằng import, cách tự đóng gói những hàm mình hay dùng thành một thư viện riêng, và vai trò của khối if __name__ == '__main__': trong tệp thư viện.
- Cánh DiềuTin học 11 (Khoa học máy tính) - Chủ đề F(CS) · Bài 14. Thực hành về thư viện các hàm tự định nghĩatr. 144
- Kết nối tri thứcTin học 11 (Khoa học máy tính) - Bài 30. Thiết lập thư viện cho chương trìnhtr. 137–142
- Kết nối tri thứcTin học 11 (Khoa học máy tính) - Bài 31. Thực hành thiết lập thư viện chương trìnhtr. 143–145
Bắt đầu bằng một hình dung
Câu lạc bộ Kĩ thuật của trường có một tủ đồ nghề đặt ở góc phòng thực hành. Trong tủ là những thứ đã được làm sẵn, thử đi thử lại nhiều lần và ai cũng dùng được: bộ tua vít đủ cỡ, cuộn dây điện đã đo sẵn, mấy cái giá đỡ in 3D, vài mạch cảm biến đã hàn xong và dán nhãn cẩn thận. Mỗi nhãn ghi rõ ba dòng: món này dùng để làm gì, cắm vào đâu, và cho ra tín hiệu kiểu gì.
Mỗi khi có nhóm nhận một dự án mới - làm đèn tự động cho hành lang, làm hệ thống tưới cây cho vườn trường - các bạn không ngồi hàn lại mạch cảm biến từ đầu. Các bạn mở tủ, lấy đúng món cần dùng, đọc nhãn rồi lắp vào. Nhờ vậy một dự án tưởng chừng mất cả tháng lại xong trong hai buổi chiều.
Có lần một bạn phát hiện cái giá đỡ hay bị lỏng ốc. Bạn ấy sửa lại đúng một lần, ngay trên món đồ trong tủ. Kể từ đó mọi nhóm mượn giá đỡ đều nhận được bản đã sửa, không ai phải sửa lại lần thứ hai.
Cái tủ đồ nghề ấy khác hẳn với hộp linh kiện riêng của từng nhóm - hộp riêng chỉ hợp với đúng một dự án và thường bị bỏ đi khi dự án kết thúc. Trong lập trình cũng có một cái tủ đồ nghề như thế, và bài này sẽ chỉ cho bạn cách mở tủ của người khác lẫn cách tự đóng cho mình một cái tủ.
Nội dung bài học
- 1) Thư viện là gì, khác mô đun ở chỗ nào?
- 2) Ba cách nạp một thư viện có sẵn
- 3) Tự đóng gói thư viện riêng và khối chạy thử
Tóm tắt lý thuyết cần nhớ
- Thư viện là tập hợp các hàm viết sẵn, đã kiểm thử, dùng lại được cho nhiều chương trình khác nhau, khác với mô đun thường chỉ phục vụ một chương trình cụ thể.
- Ba cách nạp:
import mathgọi bằngmath.sqrt(x);from math import sqrtgọi trực tiếpsqrt(x);import numpy as npđặt tên gọi tắt cho thư viện. - Tự tạo thư viện bằng cách gom các hàm dùng chung vào tệp
tienich.py, đặt cùng thư mục với chương trình chính, rồiimport tienichvà gọitienich.ten_ham(...); mỗi hàm nên có docstring mô tả nhiệm vụ, tham số và giá trị trả về. - Khối
if __name__ == '__main__':chứa phần chạy thử của tệp thư viện; phần này chỉ chạy khi mở trực tiếp tệp đó, và bị bỏ qua khi tệp đượcimportvào chương trình khác.
Thuật ngữ tiếng Anh trong bài
| Tiếng Anh | Đọc là | Nghĩa |
|---|---|---|
| library | LAI-brơ-ri | thư viện (lập trình) Bộ sưu tập các hàm viết sẵn để dùng lại, khỏi viết từ đầu - như mượn dụng cụ có sẵn trong kho thay vì tự làm. |
| module | MÔ-điu | mô đun Một phần chương trình tách riêng làm một việc, để lắp ghép lại - như từng khối LEGO ghép thành mô hình lớn. |
| 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ể. |
| node | nốt | nút Một điểm trong cây hoặc mạng lưới - giống một trạm dừng trên bản đồ các tuyến xe buýt. |
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ó đủ 22 câu, chấm điểm tự động và giải thích từng câu sai.
import math ở đầu chương trình, muốn tính căn bậc hai của 81 thì phải gọi hàm như thế nào?- sqrt(81)
- math.sqrt(81)
- import math.sqrt(81)
- math(sqrt, 81)
import math, cả thư viện được nạp vào nhưng tên các hàm bên trong vẫn phải gọi kèm tên thư viện, tức math.sqrt(81). Phương án 'sqrt(81)' chỉ đúng nếu đã nạp bằng from math import sqrt, còn ở đây tên sqrt chưa hề được đưa thẳng vào chương trình nên sẽ báo lỗi chưa định nghĩa. 'import math.sqrt(81)' sai vì import là lệnh nạp thư viện, không phải cách gọi hàm. 'math(sqrt, 81)' sai vì math là tên thư viện chứ không phải một hàm để gọi kèm đối số.- Thư viện chỉ chứa biến, còn mô đun chỉ chứa hàm, nên muốn gọi một hàm thì bắt buộc phải nạp mô đun chứ không nạp thư viện
- Thư viện bắt buộc phải do công ty phần mềm viết, học sinh không thể tự tạo được, còn mô đun thì ai cũng có thể tự viết lấy
- Thư viện gồm các hàm đã kiểm thử, dùng lại được cho nhiều chương trình khác nhau; còn mô đun thường chỉ phục vụ một chương trình cụ thể
- Thư viện luôn nằm ở thư mục khác với chương trình chính, còn mô đun thì phải nằm cùng thư mục thì mới gọi ra dùng được
.py chứa các hàm dùng chung. Phương án cuối sai vì thư viện tự viết bắt buộc phải đặt cùng thư mục với chương trình chính thì Python mới tìm thấy.from math import sqrt. Cách gọi nào sau đây là ĐÚNG?- sqrt(49)
- math.sqrt(49)
- from.sqrt(49)
- math.from.sqrt(49)
from ... import ... lấy đúng hàm sqrt và đặt thẳng tên đó vào chương trình, nên gọi trực tiếp sqrt(49) mà không cần tiền tố. Phương án math.sqrt(49) sai vì với cách nạp này, bản thân tên math chưa được đưa vào chương trình, muốn dùng phải nạp thêm bằng import math. Hai phương án còn lại sai về cú pháp: from là từ khoá của lệnh nạp thư viện, không bao giờ xuất hiện trong lời gọi hàm.- a)Khi tệp
tienich.pyđược nạp vào chương trình khác bằngimport, biến__name__trong tệp đó nhận giá trị là tên mô đun chứ không phải chuỗi '__main__'.Đúng - b)Câu lệnh
import numpy as nptạo ra một tên gọi tắt, sau đó có thể viếtnpthay chonumpymỗi khi gọi hàm của thư viện này.Đúng - c)Sau câu lệnh
from math import sqrt, ta vẫn bắt buộc phải viếtmath.sqrt(x)thì mới gọi được hàm căn bậc hai.Sai - d)Docstring của hàm chỉ có tác dụng làm mã nguồn đẹp mắt; người muốn dùng lại hàm vẫn bắt buộc phải đọc hết các lệnh bên trong mới biết hàm làm gì.Sai
- (a) Đúng - chỉ khi tệp được cho chạy trực tiếp thì
__name__mới bằng '__main__'; lúc bị import, nó mang tên mô đun nên khối chạy thử bị bỏ qua. - (b) Đúng - dạng
import ... as ...chính là cách đặt tên gọi tắt, rất tiện với những thư viện tên dài phải gõ nhiều lần. - (c) Sai -
from math import sqrtđã đưa thẳng tênsqrtvào chương trình nên gọi trực tiếpsqrt(x); ngược lại, viếtmath.sqrt(x)mới là lỗi vì tênmathchưa được nạp. - (d) Sai - docstring tồn tại đúng để người dùng lại hàm biết hàm làm gì, cần tham số nào và trả về gì mà không phải đọc mã bên trong.
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 đủ, 22 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.