from module import * nhập tất cả public name vào namespace hiện tại. PEP 8 và community khuyên KHÔNG DÙNG trong production code.
Lý do 1: Namespace Pollution (Ô nhiễm namespace)
# sample.py
def add(a, b):
return a + b
# main.py
from sample import *
def add(*nums): # Định nghĩa hàm add của mình
return sum(nums)
print(add(1,2,3,4,5)) # 15 - Gọi hàm nào? Khó biết!
Lý do 2: Khó debug & bảo trì
- Không biết
addđến từ đâu (sample.py hay local). - IDE/static analyzer không thể resolve đúng.
- Đổi tên trong module gốc → break code lặng lẽ.
Lý do 3: Ghi đè không chủ đích
from math import * from numpy import * # numpy cũng có sin, cos, log... # math.sin hay np.sin? Phụ thuộc thứ tự import! result = sin(0.5) # Nguy hiểm!
Cách đúng: Import tường minh
# Tốt: Rõ ràng nguồn gốc import sample print(sample.add(1, 2)) # 3 # Tốt: Import cụ thể from sample import add print(add(1, 2)) # 3 # Tốt: Alias nếu tên trùng import sample as sm import mymath as mm print(sm.add(1,2), mm.add(1,2))
Ngoại lệ chấp nhận được
- REPL/Interactive shell (IPython, Jupyter) để tiện gõ nhanh.
- Module được thiết kế riêng cho
import *(có__all__), hiếm gặp.
Kết luận
Luôn dùng import module hoặc from module import name1, name2. Tránh import * để code rõ ràng, dễ bảo trì, ít bug.