Bài 2 · Cơ bản · 18 phút· Cập nhật 11/06/2026
Làm quen Python & cách nó chạy
Biên soạn bởi Nguyễn Anh Tuấn
REPL, chương trình Python đầu tiên; Python thông dịch (interpreted) ra sao: mã nguồn → bytecode → máy ảo CPython - học Python cho người mới.
Python nổi tiếng gọn và dễ đọc. Chương trình đầu tiên - in ra một dòng chữ - chỉ cần đúng một dòng, không cần khai báo gì thêm:
hello.py
print("Xin chao, Python!") Kết quả khi chạy
Xin chao, Python!
So với C (cần #include, main(), dấu ;), Python lược bỏ gần hết “thủ tục”. Thêm vài dòng và một chú thích (bắt đầu bằng #):
hoc.py
# Chuong trinh dau tien cua toi
print("Toi dang hoc Python")
print("That thu vi!") Kết quả khi chạy
Toi dang hoc Python That thu vi!
- ▸print(...) in ra màn hình; str đặt trong dấu nháy "..." hoặc '...'.
- ▸Không cần “;” cuối câu, không cần “{}” - Python dùng xuống dòng & thụt lề.
- ▸# bắt đầu một chú thích - Python bỏ qua phần sau nó.
REPL: thử nhanh không cần tạo file
Chạy file: python hay uv
Nhìn thì như Python “đọc và chạy thẳng” file của bạn. Thực ra có vài chặng. Bấm Tiếp → để đi qua từng chặng, và đổi tab sang C để thấy khác biệt cốt lõi:
print("Xin chao") - ▸Python KHÔNG chạy thẳng dòng chữ: nó biên dịch sang BYTECODE trước.
- ▸Máy ảo CPython (vòng lặp viết bằng C) mới là thứ thực thi bytecode.
- ▸C thì khác: biên dịch thẳng ra mã máy, CPU chạy trực tiếp - không có máy ảo.
Python · CPython · “trình thông dịch”
Nhiều người gọi Python là ngôn ngữ thông dịch. Chính xác hơn: CPython biên dịch mã nguồn thành bytecode (tập lệnh cho máy ảo), rồi thông dịch bytecode đó. Bytecode được lưu lại trong __pycache__ để lần sau khỏi dịch lại:
sau khi chạy, thư mục có thêm bytecode đã biên dịch
my_project/
├── hello.py
└── __pycache__/
└── hello.cpython-314.pyc # bytecode (so 314 = ban CPython 3.14) Trung thực
Lớp máy ảo ở giữa khiến Python chậm hơn C, nhưng đổi lại nhiều thứ quý:
| Python | C | |
|---|---|---|
| Dịch ra | bytecode (cho máy ảo) | mã máy (cho CPU) |
| Chạy bởi | máy ảo CPython | CPU trực tiếp |
| Tốc độ | chậm hơn | rất nhanh |
| Chạy nơi khác | cùng file, chỉ cần có Python | phải biên dịch lại cho mỗi máy |
| Viết | nhanh, gọn, dễ đọc | tỉ mỉ, sát phần cứng |
Sắp tới
- ▸Thụt lề (indentation) là CÚ PHÁP: sai thụt lề là lỗi, không phải chuyện thẩm mỹ.
- ▸Phân biệt HOA/thường: Print khác print; True khác true.
- ▸str phải đóng/mở cùng loại nháy: "..." hoặc '...'.
- ▸Chạy bằng python hello.py (hoặc python3 trên Mac/Linux) - đúng thư mục chứa file.
Đọc thông báo lỗi
Câu hỏi thường gặp
Cả hai một chút. Python KHÔNG chạy thẳng từng dòng chữ: nó BIÊN DỊCH mã nguồn sang bytecode trước, rồi MÁY ẢO CPython mới thực thi bytecode đó. Nên gọi đúng hơn là “biên dịch sang bytecode rồi thông dịch bytecode”. Khác C - C biên dịch thẳng ra mã máy CPU chạy trực tiếp.
Không. Bytecode là tập lệnh GỌN dành cho MÁY ẢO CPython (vd LOAD_NAME, CALL), không phụ thuộc loại CPU. Mã máy mới là lệnh CPU thật hiểu trực tiếp. Vì Python chạy bytecode qua máy ảo nên cùng một .py chạy được trên Windows/Mac/Linux miễn có Python.
Đó là bytecode đã biên dịch, được CPython LƯU LẠI (vd hello.cpython-314.pyc - số là phiên bản Python) để lần sau khỏi biên dịch lại, chạy nhanh hơn một chút. Bạn có thể xoá nó bất cứ lúc nào; Python sẽ tạo lại.
CPython là bản cài Python phổ biến nhất, viết bằng ngôn ngữ C (vì thế tên CPython) - “máy ảo” chính là vòng lặp viết bằng C đó. Còn có PyPy (có JIT, nhanh hơn cho việc nặng), MicroPython (cho vi điều khiển)… nhưng khoá này dùng CPython.
Tick những điều em tự tin làm được. Càng lên cao, em càng hiểu sâu.
Trả lời vài câu để chắc rằng em đã nắm bài.
Khi gõ lệnh chạy một file Python, điều gì thực sự xảy ra bên trong?
- 1
Hello của mèo con
Viết và chạy một chương trình in ra “Xin chao, <tên mèo con>!”.
Hoàn thành khi: Một dòng
print("Xin chao, Tuan!"); chạypython hello.pyra đúng câu đó. - 2
Ba dòng
Viết chương trình in ra 3 dòng chữ bất kỳ, mỗi dòng một câu.
Hoàn thành khi: 3 lệnh
print, kết quả 3 dòng riêng biệt. - 3
Thử trong REPL
Mở REPL (gõ
python), tính12 * 12và đo độ dài str "Python" bằnglen(). Kết quả?Hoàn thành khi: 144 và 6. REPL in kết quả ngay, không cần
print. - 4
Ba bước bên trong
Khi gõ
python hello.py, Python làm gì trước khi in ra màn hình? Kể theo thứ tự.Hoàn thành khi: Biên dịch nguồn → bytecode (lưu
.pyc) → máy ảo CPython thực thi bytecode → in kết quả. - 5
Xoá __pycache__
Chạy một chương trình, tìm thư mục
__pycache__, xoá nó rồi chạy lại. Có sao không?Hoàn thành khi: Không sao - Python biên dịch lại và tạo
.pycmới..pycchỉ là bộ nhớ đệm. - 6
Python vs C
Bằng lời: vì sao một file
.pychạy được trên cả Windows và Mac mà không cần sửa, còn file.cthì phải biên dịch lại?Hoàn thành khi: Python chạy bytecode qua MÁY ẢO (có sẵn trên mỗi máy); C biên dịch thẳng ra mã máy gắn với một loại CPU/OS.