[Python cơ bản thường dùng trong công việc] Phần 3 : Phân chia module
Tất cả ví dụ cho đến thời điểm này đều được thực thi trong command line hoặc từ một file python .py
. Tuy nhiên, đối với các ứng dụng lớn, có nhiều chức năng thì phân chia nhỏ dự án thành các file khác nhau sẽ giúp dễ bảo trì và tái sử dụng các thành phần đã thiết kế.
Chương này sẽ giúp bạn thiết kế các tính năng theo mô hình các module và khi cần thì sẽ gọi file tương ứng và sử dụng.
Việc làm python mới ra trường cho bạn
3.1. Các loại module / thư viện
Có 3 loại module thường thấy là:
- Viết bằng Python: có phần mở rộng là
.py
- Các thư viện liên kết động: có phần mở rộng là
.dll
,.pyd
,.so
,.sl
,… - C-Module liên kết với trình phiên dịch.
3.2. Đường dẫn tìm để load module
Để tải một module vào script của bạn, sử dụng cú pháp đơn giản:
import modulename
khi gặp câu lệnh trên thì trình biên dịch sẽ tiến hành tìm kiếm file module tương ứng theo thứ tự thư mục sau:
- Thư mục hiện hành mà script đang gọi
- Các thư mục trong PYTHONPATH (nếu có set)
- Các thư mục cài đặt chuẩn trên Linux/Unix..
Có thể biết được đường dẫn mà một module đã được load bằng đoạn code dưới đây:
import math math.__file__ (Ví dụ trả về '/usr/lib/python3.6/lib-dynload/math. so') import random random.__file__ (Ví dụ trả về '/usr/lib/python3.6/random.pyc')
3.3. Lấy danh sách thuộc tính và phương thức của một module
Để lấy được danh sách các thuộc tính và phương thức mà module hỗ trợ, sử dụng hàm dir(modulename)
. Ví dụ:
dir(math) ['__doc__', '__file__', '__name__', '__package__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degree s', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'fa ctorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'hypot', 'isinf', 'isnan', 'ldexp', 'lgamma', 'lo g', 'log10', 'log1p', 'modf', 'pi', 'pow', 'radians ', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']
Có thể gọi hàm dir()
không truyền tham số để lấy các thuộc tính và phương thức của scope hiện tại đang thực thi.
3.4. Cách khai báo và sử dụng module
Giả sử bạn tạo một file python mymath.py
có nội dung như sau:
def cong(a, b): return a + b def tru(a, b): return a - b def nhan(a, b): return a * b
Sau đó, tạo một file có tên myexample.py
, trong cùng thư mục với file mymath.py
vừa tạo ở trên, có nội dung như sau:
import mymath num1 = 1 num2 = 2 print 'Tong hai so la: ', mymath.cong(num1, num2)
Vào command line, thực hiện gọi file myexample như sau:
$ python myexample.py
Sau khi thực hiện sẽ hiển thị lên màn hình là
Tong hai so la: 3
3.5. Package module
Có thể gom nhiều module .py
vào một thư mục và tên thư mục là tên của package và tạo một file __init__.py
trong thư mục này.
Như vậy, cấu trúc thư của một package sẽ như sau:
|-- mypack | |-- __init__.py | |-- mymodule1.py | |-- mymodule2.py |
Có thể sử dụng mymodule1
theo cú pháp import sau:
import mypack.mymodule1
hoặc
import mypack.mymodule1 as mymodule1
hoặc
import mypack.mymodule1 as mod
Khi sử dụng một module thuộc một package thì các lệnh trong file __init__.py
sẽ được thực hiện trước. Thông thường thì file __init__.py
sẽ rỗng.
Có thể tạo các subpackage bên trong một package theo đúng cấu trúc thư mục, có file __init__.py
. Ví dụ:
import mypack.mysubpack.mysubsubpack.modulePhần 2 : Cú pháp thông dụng”] Phần 4 : Class”] Phần 5 : thao tác trên tập tin và thư mục”] Phần 6 : Xử lý hình ảnh”]
- V Vì sao lập trình viên BE cần phải biết Figma?
- N Nên học Front-end hay Back-end trước?
- H Học back end cần học những gì? Lộ trình cho người mới bắt đầu
- T Tầm quan trọng của Loose Coupling trong hệ thống Backend
- L Lập trình Web nên học ngôn ngữ nào là phù hợp?
- N Nên học Front-end hay Back-end? Sự khác biệt là gì?
- P Phân biệt Front End và Back End, điểm khác nhau là gì?
- T Top 7 câu hỏi phỏng vấn Backend Developer
- L Lộ trình học MySQL từ A đến Z
- Q Quản lý realm database theo hướng micro-service trong iOS