Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Tại sao "import *" là ý tưởng xấu trong Python


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.