Module và package trong Python
Module là cách chúng ta đóng gói các hàm, các class xử lý một vấn đề nhất định có tính tái sử dụng. Khi chương trình có nhiều modules, chúng ta có thể sử dụng package để nhóm chúng lại. Điều này đặc biệt có ý nghĩa nếu chúng có tên hoặc chức năng tương tự.
Nội dung của bài
Cách sử dụng module trong Python
Muốn sử dụng một module trong Python chúng ta dùng từ khóa import với cú pháp như sau:
import module_name_1, module_name_2
Trong đó module_name_1 và module_name_2 là tên các modules chúng ta muốn sử dụng. Các module có sẵn trong Python được liệt kê ở đây.
Ví dụ: Sử dụng module math trong Python:
import math
num = 3.14
# làm tròn xuống
print(math.floor(num))
# prints 3.0
Khi chúng ta chỉ muốn sử dụng một phần của module, chúng ta có thể sử dụng từ khóa: from…import theo cú pháp:
from math import ceil
num = 3.14
# làm tròn lên
print(ceil(num))
# prints 4.0
Viết mới một module
Chúng ta có thể xây dựng module của riêng mình và sử dụng khi cần thiết.
Ví dụ chúng ta xây dựng module custom_math, đầu tiên chúng ta tạo ra file custom_math.py:
message = 'Custom math module'
def sum(start, *numbers):
'''Calculate the sum of unlimited number
Params:
start:int/float, the start sum
*numbers:int/float, the numbers to sum up
Return: int/float
'''
for x in numbers:
start += x
return start
def fact(n):
'''Calculate the factorial of n
Params:
n:int
Return: int
'''
f = 1
for i in range(1, n + 1):
f *= i
return f
Trong file main.py chúng ta sử dụng module custom_math.py
import custom_math
print(custom_math.fact(10))
# prints 3628800
Những lưu ý khi sử dụng module
Khi chúng ta khai báo trong file main.py dòng lệnh: import custom_math, Python sẽ tìm trong thự chứa file main.py.
Nếu không có module custom_math, Python sẽ tìm kiếm theo danh sách được định nghĩa ở sys.path:
>>> for p in sys.path:
... print(p)
...
/usr/local/Cellar/python@3.9/3.9.2_4/Frameworks/Python.framework/Versions/3.9/lib/python39.zip
/usr/local/Cellar/python@3.9/3.9.2_4/Frameworks/Python.framework/Versions/3.9/lib/python3.9
/usr/local/Cellar/python@3.9/3.9.2_4/Frameworks/Python.framework/Versions/3.9/lib/python3.9/lib-dynload
/Users/quangduy/Library/Python/3.9/lib/python/site-packages
/usr/local/lib/python3.9/site-packages
/usr/local/lib/python3.9/site-packages/python_dateutil-2.8.2-py3.9.egg
...
/usr/local/lib/python3.9/site-packages
Đôi khi chúng ta import một module có sẵn của Python, ví dụ trong file main.py chúng ta khai báo: import math.
Nhưng trong thư mục chưa file main.py lại tồn tại một file math.py với nội dung trống.
import math
print(math.floor(3.14))
# prints AttributeError: module 'math' has no attribute 'floor'
Sử dụng package trong Python
Trong Python, việc nhóm các module có cùng mục đích sử dụng vào một thư mục chính là package các module.
Ví dụ, chúng ta tạo ra thư mục modules cùng cấp với file main.py rồi di chuyển file custom_math.py vào thư mục này. Giờ muốn sử dụng module custom_math.py chúng ta sử dụng:
from modules.custom_math import *
print(fact(10))
# prints 3628800
Nếu trong thư mục modules có nhiều module, khi muốn sử dụng tất cả các module chúng ta phải import từng module một. Hoặc tạo ra file __init__.py với nội dung:
from modules.custom_math import *
from modules.module2 import *
Trong file main.py chúng ta có thể sử dụng:
import modules as md
print(md.fact(10))
# prints 3628800
File __init__.py được thực thi khi chúng ta gọi câu lệnh import một package, ở file này chúng ta có thể khởi tạo các giá trị cần thiết cho package như import các module…
Tổng kết
- Mỗi file .py là một module.
- Để sử dụng các hàm viết trong một module khác có thể sử dụng từ khóa import, from…import.
- Python ưu tiên tìm tên module trong thư mục chứa file có lời gọi, tiếp theo là các thư mục trong sys.path.
- Các module trong cùng một thư mục kết hợp thành một package.
- Khởi tạo một package bằng cách tạo và khai báo các đoạn code trong file __init__.py
Đây là kiên thức khá quan trọng trong quá trình phát triển phần mềm. Bạn hãy tìm hiểu thật kỹ nhé.