Lesson 15: Modules và Packages

🎯 Mục Tiêu

  • Khám phá mô hình cấu trúc tổ chức Code thực sự ngoài doanh nghiệp.
  • Học cách kết nối (Import) vô số tính năng viết sẵn, không phải còng lưng code toán học lại từ đầu.
  • Phân biệt giữa import toàn bộ và from... import... chọn lọc.
  • Thiết kế gói Package của riêng bạn với file lõi __init__.py.
  • Lý giải cấu trúc trứ danh của Python: if __name__ == "__main__":

Phân Phối Code với Modules

Khi Project của bạn dài 20.000 dòng code, bạn không thể nhét hết vào 1 file main.py. Nó quá rối! Bạn chia file math_helper.py để chứa hàm làm Toán, database.py để lưu Database. Mỗi 1 tệp đuôi .py đó được gọi danh xưng chuẩn là một Module.

Bây giờ bạn muốn kết nối sức mạnh từ 1 File khác sang File bạn đang đứng? Hãy dùng import.

Cú Pháp Import Phổ Biến

Cách 1: Bê cả mâm (Import toàn bộ)

Khi bạn bê nguyên Module, muốn móc hàm bên trong bạn phải gọi THEO HỌ của nó.

import math

# Gọi lệnh thông qua cấu trúc Dấu Chấm: ten_module.ten_ham
can_bac_hai = math.sqrt(16) 
print(can_bac_hai) # 4.0

Cách 2: Bí Danh Rút Gọn (Alias)

Cái tên thư viện quá dài (ví dụ matplotlib.pyplot) mà gọi ngàn lần thì mỏi tay. Hãy đặt Biệt danh chữ viết tắt cho tệp tin đó bằng as.

import pandas as pd
import numpy as np

# Giờ chỉ việc xài:
# my_data = pd.read_csv("file.csv") 

Cách 3: Bốc đúng thứ cần từ mâm (from ... import ...)

Cách này giúp nhẹ Ram và không phải ghi họ tên file khi gọi hàm.

# Gọi anh Pi và anh Sqrt trong gia đình Math thôi.
from math import pi, sqrt

# Gọi trực tiếp tên thật như con cháu ruột trong nhà
print(pi)   # 3.14159...
print(sqrt(9)) # Ra thẳng 3.0 mà không cần gõ math.sqrt

Package là gì?

Nếu File .py gọi là Module, thì 1 Thư Mục to đùng Chứa Hàng Chục cái Module gọi là Package (Gói). Để Python chịu nhận diện “Đây không phải cái Thư mục Win 10 bình thường, đây là hệ thống Code Package!”, bạn T BẮT BUỘC phải tạo một file có tên __init__.py (thường bỏ trống ruột) để bên trong thư mục đó.

Cấu trúc thư mục:

my_app/
    __init__.py
    database/
        __init__.py
        models.py
    ui/
        __init__.py
        window.py

Cách gọi ở file gốc: from my_app.database.models import UserInfo

Bí Mật của Dòng Cản Trở Huyền Thoại: if __name__ == "__main__":

Giả sử bạn có module tinh_toan.py. Trong file đó ngoài các Hàm, bạn quẹt thêm 1 hai dòng print("Tui đang test file") ở tít cuối. Hễ cứ một ai đó bên file main.py gõ chữ import tinh_toan, đoạn in “Tui đang test” lập tức Vô duyên vô cớ BỊ TUÔN RA dù người ta chưa gọi cái hàm nào cả. Vì lệnh import mang ý nghĩa là Chạy Rà Soát lại toàn bộ File 1 lần.

Đó là lúc Cấu trúc Huyền thoại này cứu rỗi Developer:

# File tinh_toan.py
def Cong(a, b):
    return a + b

# Đóng rào cảnh báo!
if __name__ == "__main__":
    # Chỉ khi bạn TRỰC TIẾP click "Run" thẳng mặt file tinh_toan.py thì khối lệnh dưới mới mọc ra màn hình
    print("Testing chạy thử file:")
    print(Cong(2,5))

# Còn nếu file `main.py` chót gõ chữ import tinh_toan, thì cái khoá __main__ này sẽ khóa sập hầm, ẩn giấu giùm bạn những đoạn Code dơ, kịch bản Test cá nhân. Không tuôn rác sang nhà hàng xóm.

💡 Key Takeaways

  • Khi gọi import math, mọi thứ trong math đều bị kéo vào RAM. Nếu chỉ cần cái hàm cộng, dùng from math import sum.
  • Luôn phải nặn cái file rỗng ruột __init__.py khi muốn thiết kế 1 cục Folder Package lớn chuẩn chỉnh.
  • Mọi khối code phục vụ Mục Đích Chạy Thử (Test) phải bị lùi dòng nhốt chặt vào phía sau cánh cửa an ninh if __name__ == "__main__": để tính năng Code có tái sử dụng ở Nơi khác không bị lôi kéo theo rác.

➡️ Bài Tiếp Theo Lesson 16 – Built-in Functions

Leave a Reply

Your email address will not be published. Required fields are marked *