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.

Standard Library vs. Third-Party Library
PythoncoreStandard librarymath / json / os…Third-party librarypandas / requests…đi kèmpip install
Thư viện chuẩn đi kèm chính Python, nên không cần cài thêm. Thư viện bên thứ ba cần pip install riêng.
LoạiCài đặtVí dụ
Standard libraryĐi kèm Python (không cần cài)math / os / sys / json / datetime / re / asyncio
Third-party libraryThêm qua pip installpandas / 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.

7 danh mục của Thư viện chuẩn
StandardlibraryA Runtime& filesB Số / ngàyrandomC Chuỗi& textD DataI / OE Cấu trúcdữ liệu mở rộngF Quản lýtài nguyênG Đồng thời& song song
Node standard library trung tâm chia thành 7 danh mục theo mục đích. Series này phủ tất cả 7 theo thứ tự, từ A đến G. Danh mục G màu khác vì giới hạn của runtime trình duyệt (sẽ nói ở mục tiếp theo).
Danh mụcModule tiêu biểuBạn làm được gì
A Runtime và filesys / os / pathlib / shutilKiểm tra runtime, làm việc với file và folder
B Số, ngày, ngẫu nhiênmath / statistics / decimal / datetime / randomTí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à textre / string / textwrap / pprintTrích bằng regex, thay thế template, ngắt dòng, pretty-print
D Data I/Ojson / csv / pickle / base64 / hashlibChuyển đối tượng đến và từ luồng text hoặc byte
E Cấu trúc dữ liệu mở rộngcollections / itertools / functools / dataclassesVượ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êncontextlib / loggingTự xây with block và phát log cho code dễ vận hành
G Đồng thời và song songasyncio / threading / multiprocessingChạ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ả randomsecrets đề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ạngVí dụ gọiKhi nào hợp
import mathmath.sqrt(2)Mặc định. Ai đọc code cũng biết hàm đến từ đâu
import json as JJ.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 datetimedatetime(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()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.

Cái nào chạy trên trình duyệt, cái nào không
Chạy đượcmath / json / redatetime / asyncioHạn chếthreading(không có thread thật)Không chạymultiprocessingsubprocessCách của tathực hànhtập trung sơ đồchỉ sơ đồ
Pyodide / MicroPython không có process OS hoặc socket mạng, nên thư viện như multiprocessingsubprocess 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ànhmath / re / datetime / json / collections / asyncio và nhiều hơnChạy nguyên trên Pyodide / MicroPython
Tập trung sơ đồ + quizthreading / concurrent.futuresThread 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 / subprocessKhô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.

QUIZ

Kiểm tra kiến thức

Hãy trả lời từng câu hỏi một.

Câu 1Cái nào sau đây mô tả đúng sự khác biệt giữa standard librarythird-party library?

Câu 2Dạng import nào sau đây bạn nên tránh nói chung?