⚡ Cheatsheet cú pháp Python
← Quay lại Bắt đầu
Cách dùng
Đây là bảng tra nhanh khi quên cú pháp. Mỗi mục có link tới module giải thích đầy đủ.
Cơ bản
print("Xin chao") # In ra màn hình
print("a", "b", sep="-", end="\n") # Tùy chỉnh phân cách và kết thúc
x = input("Nhap: ") # Nhận dữ liệu (LUÔN trả về chuỗi)
# Comment một dòng
"""Docstring nhiều dòng"""→ 02 - Chương trình đầu tiên và cú pháp nền tảng
Kiểu dữ liệu
so_nguyen = 42 # int — không giới hạn độ lớn
so_thuc = 3.14 # float — CÓ SAI SỐ
chuoi = "abc" # str — bất biến
dung_sai = True # bool — True/False viết HOA
khong_co = None # NoneType — tương đương NULL
type(x) # Xem kiểu
isinstance(x, int) # Kiểm tra kiểu (khuyến nghị)
int("42") # Ép sang int
float("3.14") # Ép sang float
str(42) # Ép sang chuỗi
bool(0) # False
from decimal import Decimal
Decimal("0.1") + Decimal("0.2") # 0.3 chính xác — DÙNG CHO TIỀNToán tử
a + b a - b a * b
a / b # Chia thực -> LUÔN float
a // b # Chia nguyên -> làm tròn XUỐNG
a % b # Chia dư
a ** b # Lũy thừa
a += 1 a -= 1 a *= 2 # Python KHÔNG có ++ và --
== != > < >= <= # So sánh
0 <= x <= 100 # Chained comparison (như BETWEEN)
and or not # KHÔNG dùng && || !
x is None x is not None # Chỉ dùng is với None/True/False
x in danh_sach x not in danh_sach # Kiểm tra thành viên
kq = "A" if dieu_kien else "B" # Toán tử ba ngôi (như CASE WHEN)Chuỗi
s = "PYTHON"
s[0] # 'P' — chỉ số bắt đầu từ 0
s[-1] # 'N' — phần tử cuối
s[1:4] # 'YTH' — KHÔNG lấy chỉ số 4
s[:3] # 'PYT'
s[3:] # 'HON'
s[::-1] # 'NOHTYP' — đảo ngược
len(s) # 6
# f-string
f"Ten: {ten}, Tuoi: {tuoi}"
f"{so:.2f}" # 2 chữ số thập phân
f"{so:,}" # 1,234,567 — phân cách hàng nghìn
f"{so:,.2f}" # 1,234,567.89
f"{so:>10}" # Căn phải, độ rộng 10
f"{so:<10}" # Căn trái
f"{so:^10}" # Căn giữa
f"{so:05d}" # 00042 — đệm số 0
f"{ty_le:.1%}" # 8.8%
f"{bien=}" # bien=42 — debug
# Method (LUÔN trả về chuỗi MỚI, phải gán lại)
s.upper() s.lower() s.title() s.capitalize()
s.strip() s.lstrip() s.rstrip()
s.replace("a", "b")
s.split(",") # Chuỗi -> list
",".join(danh_sach) # List -> chuỗi
s.startswith("PY") s.endswith("ON")
s.find("TH") # -1 nếu không thấy
s.count("N")
s.isdigit() s.isalpha() s.isalnum()
s.zfill(5) s.ljust(10) s.rjust(10) s.center(10)
r"C:\Users\new" # Raw string — cho đường dẫn WindowsRẽ nhánh
if dieu_kien:
...
elif dieu_kien_2:
...
else:
...
# match/case (Python 3.10+)
match gia_tri:
case "A":
...
case "B" | "C": # Nhiều giá trị
...
case x if x > 10: # Có điều kiện
...
case _: # Mặc định
...Falsy: 0, 0.0, "", [], {}, (), None, False
Truthy: mọi thứ khác (kể cả "0", "False", -1, " ")
→ 06 - Cấu trúc rẽ nhánh (if-elif-else)
Vòng lặp
for i in range(5): # 0,1,2,3,4
for i in range(1, 6): # 1,2,3,4,5
for i in range(0, 10, 2): # 0,2,4,6,8
for i in range(10, 0, -1): # 10..1
for x in danh_sach: ...
for k, v in tu_dien.items(): ...
for i, x in enumerate(ds, start=1): ...
for a, b in zip(ds1, ds2): ...
while dieu_kien:
...
while True:
...
if xong:
break
break # Thoát vòng lặp
continue # Bỏ qua, sang vòng tiếp
for ... else: # else chạy khi KHÔNG bị breakList
ds = [1, 2, 3]
ds[0] ds[-1] ds[1:3] ds[::-1]
len(ds)
ds.append(4) # Thêm 1 phần tử vào cuối
ds.insert(0, 0) # Chèn vào vị trí
ds.extend([5, 6]) # Nối nhiều phần tử
ds.remove(3) # Xóa theo GIÁ TRỊ (lỗi nếu không có)
x = ds.pop() # Xóa cuối, TRẢ VỀ phần tử
x = ds.pop(0) # Xóa theo vị trí
del ds[0]
ds.clear()
ds.sort() # Sửa TẠI CHỖ, trả về None
ds.sort(reverse=True)
ds.sort(key=lambda x: x["gia"])
moi = sorted(ds) # KHÔNG sửa gốc, trả list MỚI
ds.reverse()
ds.index(2) ds.count(2)
sum(ds) min(ds) max(ds)
# List comprehension
[x * 2 for x in ds]
[x for x in ds if x > 2] # Lọc
["Chan" if x % 2 == 0 else "Le" for x in ds] # Biến đổi
# COPY — b = a KHÔNG tạo bản sao!
b = ds.copy() b = ds[:] b = list(ds)
import copy; b = copy.deepcopy(ds) # List lồng nhauTuple
t = (1, 2, 3)
t1 = (5,) # 1 phần tử BẮT BUỘC có dấu phẩy
a, b, c = t # Unpacking
a, *con_lai = t # Gom phần dư
a, b = b, a # Hoán đổi
list(t) tuple(ds) # Chuyển đổiDict
d = {"a": 1, "b": 2}
d["a"] # KeyError nếu không có
d.get("c") # None nếu không có
d.get("c", 0) # Giá trị mặc định
d["c"] = 3 # Thêm/sửa
d.update({"d": 4})
del d["a"]
x = d.pop("b")
d.setdefault("e", 5) # Thêm nếu chưa có
"a" in d # Kiểm tra KHÓA
d.keys() d.values() d.items()
for k, v in d.items(): ...
{k: v * 2 for k, v in d.items()} # Dict comprehension
{k: v for k, v in d.items() if v > 1} # Lọc
# Từ list các dict
index = {x["ma"]: x for x in danh_sach} # Tạo chỉ mụcSet
s = {1, 2, 3}
s = set() # Set RỖNG — không dùng {}
s.add(4) s.update([5,6])
s.discard(1) # Không lỗi nếu không có
s.remove(2) # Lỗi nếu không có
a | b # Hợp (UNION)
a & b # Giao (INTERSECT)
a - b # Hiệu (EXCEPT)
a ^ b # Hiệu đối xứng
list(set(ds)) # Loại trùng (mất thứ tự)
list(dict.fromkeys(ds)) # Loại trùng (GIỮ thứ tự)Hàm
def ten_ham(a, b, c=10, *args, d=20, **kwargs):
"""Docstring mô tả hàm."""
return a + b
ten_ham(1, 2) # Positional
ten_ham(a=1, b=2) # Keyword
ten_ham(*[1, 2]) # Giải nén list
ten_ham(**{"a": 1, "b": 2}) # Giải nén dict
# ⚠️ KHÔNG dùng list/dict làm mặc định
def f(ds=None):
if ds is None:
ds = []
# Type hints
def f(x: int, y: str = "a") -> float: ...
# Lambda
f = lambda x: x * 2
sorted(ds, key=lambda x: x["gia"])
max(ds, key=lambda x: x["gia"])
global x # Sửa biến toàn cục (TRÁNH DÙNG)Xử lý lỗi
try:
...
except ValueError as e:
print(f"Loi: {e}")
except (TypeError, KeyError):
...
except Exception as e:
print(f"{type(e).__name__}: {e}")
else:
# Chạy khi KHÔNG có lỗi
...
finally:
# LUÔN chạy
...
raise ValueError("Thong bao loi")
raise # Ném lại lỗi gốc
class LoiTuyChinh(Exception):
passException phổ biến: ValueError, TypeError, NameError, IndexError, KeyError, ZeroDivisionError, AttributeError, FileNotFoundError, ImportError
Module
import math
import datetime as dt
from math import sqrt, pi
# from math import * ❌ TRÁNH
if __name__ == "__main__":
main()# datetime
from datetime import date, datetime, timedelta
date.today()
datetime.now()
date(2026, 8, 8)
d.strftime("%d/%m/%Y") # date -> chuỗi
datetime.strptime("08/08/2026", "%d/%m/%Y") # chuỗi -> datetime
d + timedelta(days=30)
(d2 - d1).days
# math
math.sqrt(16) math.ceil(4.1) math.floor(4.9) math.pi
# collections
from collections import Counter, defaultdict
Counter(ds).most_common(3)
d = defaultdict(int); d["x"] += 1
d = defaultdict(list); d["x"].append(1)
# json
import json
json.dumps(obj, ensure_ascii=False, indent=2) # -> chuỗi
json.loads(s) # chuỗi -> obj
json.dump(obj, f, ensure_ascii=False, indent=2) # -> file
json.load(f) # file -> obj
# pathlib
from pathlib import Path
p = Path("thu_muc") / "file.csv"
p.exists() p.name p.stem p.suffix p.parent
p.mkdir(parents=True, exist_ok=True)
p.glob("**/*.csv")→ 12 - Module, Package và Thư viện chuẩn
File
# Text
with open("f.txt", "r", encoding="utf-8") as f:
noi_dung = f.read() # Toàn bộ
cac_dong = f.readlines() # List các dòng
for dong in f: # Từng dòng (tiết kiệm RAM)
print(dong.strip())
with open("f.txt", "w", encoding="utf-8") as f: # "w" XÓA file cũ
f.write("noi dung\n")
f.writelines(["a\n", "b\n"])
with open("f.txt", "a", encoding="utf-8") as f: # Ghi thêm
f.write("them\n")
# CSV
import csv
with open("f.csv", newline="", encoding="utf-8-sig") as f:
for dong in csv.DictReader(f):
print(dong["ten"])
with open("f.csv", "w", newline="", encoding="utf-8-sig") as f:
w = csv.DictWriter(f, fieldnames=["a","b"], delimiter=";")
w.writeheader()
w.writerows(du_lieu)Mode: "r" đọc | "w" ghi đè | "a" ghi thêm | "x" tạo mới
Encoding: utf-8 mặc định | utf-8-sig cho Excel
OOP
class TenClass(ClassCha):
"""Docstring."""
hang_so = 10 # Class attribute
def __init__(self, a, b):
super().__init__(a) # Gọi cha
self.a = a # Instance attribute
self._noi_bo = b # Quy ước: nội bộ
def method(self):
return self.a
@property
def gia_tri(self):
return self._noi_bo
@gia_tri.setter
def gia_tri(self, x):
if x < 0:
raise ValueError("...")
self._noi_bo = x
def __str__(self): return "cho nguoi doc"
def __repr__(self): return "cho lap trinh vien"
def __len__(self): return len(self.ds)
def __eq__(self, o): return self.a == o.a
# dataclass
from dataclasses import dataclass, field
@dataclass
class SanPham:
ma: str
ten: str
gia: float = 0
ds: list = field(default_factory=list) # KHÔNG dùng = []
@dataclass(frozen=True) # Bất biến
@dataclass(order=True) # Tự sinh <, >
# Abstract
from abc import ABC, abstractmethod
class Co So(ABC):
@abstractmethod
def method(self): ...
isinstance(x, TenClass) issubclass(A, B)→ 14 - Lập trình hướng đối tượng (OOP)
venv & pip
python -m venv .venv
.venv\Scripts\activate # Windows CMD
source .venv/bin/activate # Linux/Mac
deactivate
pip install ten_goi
pip install ten_goi==1.2.3
pip install --upgrade ten_goi
pip uninstall ten_goi
pip list
pip show ten_goi
pip freeze > requirements.txt
pip install -r requirements.txtDatabase (SQLite)
import sqlite3
conn = sqlite3.connect("db.db")
conn.row_factory = sqlite3.Row # Truy cập theo tên cột
cur = conn.cursor()
# ⚠️ LUÔN dùng placeholder, KHÔNG nối chuỗi
cur.execute("SELECT * FROM T WHERE Ma = ?", (ma,)) # tuple 1 phần tử!
cur.execute("... WHERE A = :a", {"a": 1}) # Theo tên
cur.executemany("INSERT ... VALUES (?, ?)", danh_sach)
cur.fetchone() # 1 dòng hoặc None
cur.fetchall() # List
cur.fetchmany(5)
for dong in cur: ...
[dict(d) for d in cur.fetchall()] # -> list các dict
cur.rowcount # Số dòng ảnh hưởng
cur.lastrowid # Id vừa INSERT
conn.commit() # ⚠️ BẮT BUỘC sau INSERT/UPDATE/DELETE
conn.rollback()
conn.close()Placeholder: sqlite3/pyodbc dùng ? | psycopg dùng %s
→ 16 - Python kết nối Database
Quy chuẩn PEP 8
| Đối tượng | Quy ước | Ví dụ |
|---|---|---|
| Biến, hàm, module | snake_case | tong_tien, tinh_thue() |
| Class | PascalCase | KhachHang, PhieuThu |
| Hằng số | UPPER_CASE | THUE_SUAT_VAT |
| Nội bộ | _dau_gach_duoi | _so_du |
| Thụt lề | 4 dấu cách | |
| Độ dài dòng | ≤ 79 ký tự | |
| So sánh với None | is None | không dùng == None |
| Import | 3 nhóm: chuẩn, bên thứ ba, dự án |