⚡ 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ỀN

→ 03 - Biến và kiểu dữ liệu


Toá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)

→ 04 - Toán tử và biểu thức


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 Windows

→ 05 - Chuỗi ký tự (String)


Rẽ 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ị break

→ 07 - Vòng lặp (for-while)


List

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 nhau

→ 08 - List và Tuple


Tuple

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 đổi

→ 08 - List và Tuple


Dict

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ục

→ 09 - Dict và Set


Set

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ự)

→ 09 - Dict và Set


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)

→ 10 - Hàm (Function)


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):
    pass

Exception phổ biến: ValueError, TypeError, NameError, IndexError, KeyError, ZeroDivisionError, AttributeError, FileNotFoundError, ImportError

→ 11 - Xử lý lỗi (Exception)


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

→ 13 - Làm việc với File


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.txt

→ 15 - Môi trường ảo và pip


Database (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ượngQuy ướcVí dụ
Biến, hàm, modulesnake_casetong_tien, tinh_thue()
ClassPascalCaseKhachHang, PhieuThu
Hằng sốUPPER_CASETHUE_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 Noneis Nonekhông dùng == None
Import3 nhóm: chuẩn, bên thứ ba, dự án

Liên kết