Câu 1Cái nào sau đây mô tả đúng sự khác biệt giữa standard library và third-party library?
Các danh mục Thư viện chuẩn — Khi nào dùng cái nào
Có cái nhìn tổng quan về thư viện chuẩn Python qua 7 danh mục. Xử lý ngày, tính toán số, I/O dữ liệu, đồng thời — biết import gì cho từng tình huống.
Thư viện chuẩn của Python là tập hợp hàng trăm module bạn dùng được chỉ với import — không cần pip install. Bài này tổ chức toàn bộ thành 7 danh mục để bạn nhìn thấy bố cục trong nháy mắt.
Thư viện chuẩn là gì — Module đi kèm Python
Thư viện chuẩn là bộ sưu tập module hoạt động ngay khi bạn cài Python. Những thứ như math, os, và json có sẵn chỉ với import — bạn không bao giờ phải chạy pip install cho chúng.
pip install riêng.| Loại | Cài đặt | Ví dụ |
|---|---|---|
| Standard library | Đi kèm Python (không cần cài) | math / os / sys / json / datetime / re / asyncio |
| Third-party library | Thêm qua pip install | pandas / numpy / requests / fastapi |
Có những tình huống thư viện chuẩn không đủ, nhưng thử cái chuẩn trước thường có lợi về lâu dài. Đây là lý do.
- Không cần cài thêm, nên chạy được khắp nơi — server nội bộ, CI, container Docker, kể cả runtime trình duyệt mà series này dùng
- Quản lý version dễ — khi bạn cố định version Python, version thư viện chuẩn cũng tự động cố định
- Đã được kiểm chứng và ổn định — thư viện chuẩn tiến hóa nhưng giữ tương thích ngược nghiêm ngặt, nên code bạn viết nhiều năm trước vẫn chạy
7 danh mục theo mục đích sử dụng
Thư viện chuẩn có hàng trăm module, nhưng gom chúng thành 7 danh mục theo mục đích giúp bạn dễ biết tìm ở đâu hơn nhiều. Series này theo cùng thứ tự đó, đi qua từng danh mục một từ trên xuống dưới.
| Danh mục | Module tiêu biểu | Bạn làm được gì |
|---|---|---|
| A Runtime và file | sys / os / pathlib / shutil | Kiểm tra runtime, làm việc với file và folder |
| B Số, ngày, ngẫu nhiên | math / statistics / decimal / datetime / random | Tính toán số, toán tiền sai số thấp, số học ngày tháng, sinh số ngẫu nhiên |
| C Chuỗi và text | re / string / textwrap / pprint | Trích bằng regex, thay thế template, ngắt dòng, pretty-print |
| D Data I/O | json / csv / pickle / base64 / hashlib | Chuyển đối tượng đến và từ luồng text hoặc byte |
| E Cấu trúc dữ liệu mở rộng | collections / itertools / functools / dataclasses | Vượt qua list và dict thường — cấu trúc dữ liệu phong phú hơn |
| F Quản lý tài nguyên | contextlib / logging | Tự xây with block và phát log cho code dễ vận hành |
| G Đồng thời và song song | asyncio / threading / multiprocessing | Chạy việc song song |
Mỗi danh mục liệt kê nhiều module vì mục tiêu giống nhau nhưng góc nhìn khác. Ví dụ, ở danh mục B, cả random và secrets đều sinh số ngẫu nhiên, nhưng random dành cho game và dữ liệu test, còn secrets trả về số ngẫu nhiên mạnh phù hợp các trường hợp bảo mật như token reset password. Series này đi qua từng danh mục và sắp xếp các module giống-nhưng-khác này để bạn biết với cái nào.
Cách viết import — Quy ước tránh đụng tên
Có nhiều cách viết import khi gọi vào thư viện chuẩn (đã nói chi tiết ở bài trước). Mỗi cách có ưu điểm và bẫy riêng, nên bạn chọn theo tình huống. Đây là 4 mẫu thường gặp.
| Dạng | Ví dụ gọi | Khi nào hợp |
|---|---|---|
| import math | math.sqrt(2) | Mặc định. Ai đọc code cũng biết hàm đến từ đâu |
| import json as J | J.dumps(data) | Khi bạn muốn alias ngắn trong một file (cũng vậy với cái thông dụng như np / pd) |
| from datetime import datetime | datetime(2024, 1, 1) | Khi bạn chỉ dùng 1-2 tên từ module |
| from os import * | getcwd() | Tránh nói chung. Đây là ổ chứa đụng tên |
Dạng import math cho thấy mỗi tên đến từ đâu tại nơi gọi, nên bạn không lạc khi đọc lại code sau này. Mặt khác, dạng from package import function bỏ tiền tố tên module (phần gắn trước tên hàm, như math. trong math.sqrt), cho phép viết gọn như datetime(2024, 1, 1).
Tránh from x import star theo nguyên tắc
Viết from os import * để kéo mọi tên vào có thể âm thầm ghi đè hàm cùng tên định nghĩa ở chỗ khác. Ví dụ, os.open() và open() built-in là hai thứ khác nhau, nhưng viết from os import * thay open built-in bằng os.open và phá việc đọc/ghi file. Tránh nó cho cả module riêng của bạn lẫn module thư viện chuẩn — đó là nước đi an toàn.
Thư viện chuẩn không chạy được trên trình duyệt — Series này xử lý ra sao
Bài tập trong series này chạy trên runtime Python dựa trên trình duyệt (MicroPython hoặc Pyodide). Hầu hết thư viện chuẩn chạy tốt, nhưng bất cứ thứ gì cần thread hoặc process của OS đơn giản là không thể chạy — sandbox của trình duyệt không cho phép. sys.argv (cơ chế nhận tham số dòng lệnh) cũng chạy trên máy thật nhưng không chạy trên trình duyệt, vì không có cách truyền tham số vào. Với những cái này, chúng ta phủ khái niệm bằng sơ đồ để bạn nhớ lại nhanh khi viết code trên máy thật.
multiprocessing và subprocess khởi động cái gì đó bên ngoài không chạy được. Series này phủ chúng chỉ bằng sơ đồ.| Cách xử lý | Module được phủ | Lý do |
|---|---|---|
| Thực hành | math / re / datetime / json / collections / asyncio và nhiều hơn | Chạy nguyên trên Pyodide / MicroPython |
| Tập trung sơ đồ + quiz | threading / concurrent.futures | Thread thật không chạy trên trình duyệt, nhưng khái niệm quan trọng trong việc thực tế |
| Chỉ sơ đồ | multiprocessing / subprocess | Không có process OS nghĩa là bài tập thực hành không khả thi |
Vì sao vẫn phủ chủ đề chỉ-sơ-đồ
Trong việc thật, chắc chắn bạn sẽ chạy code trên OS thực sự ở thời điểm nào đó. Khi đó, biết các khái niệm đằng sau threading vs. multiprocessing hoặc chạy lệnh qua subprocess tạo ra khác biệt lớn về việc bạn dễ bước bước đầu tiên thế nào. Series này không bỏ qua chủ đề chỉ vì chúng không chạy trên trình duyệt — thay vào đó, chúng ta vẽ sơ đồ phần không chạy được, để bạn nhớ lại khi thực sự cần viết code.
Kiểm tra kiến thức
Hãy trả lời từng câu hỏi một.
Câu 2Dạng import nào sau đây bạn nên tránh nói chung?