1.1 Làm quen với các module
Module trong Python là file có phần mở rộng .py, chứa mã. Các module cho phép chia mã lớn thành các phần nhỏ hơn, dễ quản lý hơn. Mỗi module có thể chứa hàm, lớp và biến, cũng như thực hiện một số mã khi được nhập.
Ví dụ về module đơn giản
Tạo module mymodule.py:
# mymodule.py
def greet(name):
return f"Hello, {name}!"
pi = 3.14159
Bây giờ module này có thể được nhập và sử dụng trong file khác.
1.2 Nhập các module
Python cung cấp một số cách để nhập các module. Hãy xem từng cách một.
Nhập toàn bộ module
Cú pháp chung của thao tác này có dạng:
import module
Phương pháp này nhập toàn bộ module, và bạn có thể sử dụng các hàm và biến của nó bằng cách chỉ định tên module.
import module
print(module.greet("Alice")) # Xuất: Hello, Alice!
print(module.pi) # Xuất: 3.14159
Chúng ta đã từng làm điều này với module math, nhớ không?
import math
print(math.ceil(13 / 7)) # làm tròn lên
print(math.floor(13 / 7)) # làm tròn xuống
Nhập các phần tử cụ thể từ module
Bạn có thể nhập không phải tất cả mọi thứ trong module, mà chỉ một số phần tử cụ thể. Cú pháp chung của thao tác này có dạng:
from module import func, var
Phương pháp này chỉ nhập các hàm, lớp hoặc biến nhất định từ module, cho phép sử dụng chúng mà không cần chỉ định tên module.
from mymodule import greet, pi
print(greet("Bob")) # Xuất: Hello, Bob!
print(pi) # Xuất: 3.14159
Nhập module với bí danh
Cú pháp chung của thao tác này có dạng:
import module as alias
Phương pháp này cho phép nhập module và gán cho nó một tên khác, điều này có thể hữu ích để giảm độ dài của tên module hoặc để giải quyết xung đột tên.
import mymodule as mm
print(mm.greet("Charlie")) # Xuất: Hello, Charlie!
print(mm.pi) # Xuất: 3.14159
Nhập tất cả phần tử từ module
Cú pháp chung của thao tác này có dạng:
from module import *
Phương pháp này nhập tất cả hàm, lớp và biến từ module, cho phép sử dụng chúng mà không cần chỉ định tên module. Tuy nhiên, việc sử dụng phương pháp này không được khuyến nghị, vì nó có thể gây xung đột tên và làm khó đọc mã.
from mymodule import *
print(greet("Dave")) # Xuất: Hello, Dave!
print(pi) # Xuất: 3.14159
1.3 Bên dưới quá trình nhập
Thứ tự tìm kiếm module
Khi bạn nhập module, Python tìm kiếm nó theo một thứ tự nhất định:
- Thư mục hiện tại: Python đầu tiên tìm kiếm module trong thư mục hiện tại, nơi đã chạy kịch bản.
- Biến môi trường
PYTHONPATH: Nếu module không tìm thấy trong thư mục hiện tại, Python tìm kiếm nó trong các thư mục được chỉ định trong biến môi trườngPYTHONPATH. - Các thư mục tiêu chuẩn: Nếu module vẫn chưa tìm thấy, Python tìm kiếm nó trong các thư mục tiêu chuẩn, chẳng hạn như các thư mục được chỉ định trong
sys.path.
Ví dụ:
import sys
for path in sys.path:
print(path)
Nhập cục bộ và nhập toàn cầu
Việc nhập module có thể thực hiện cả ở cấp độ toàn cầu (ở đầu file), và ở cấp độ cục bộ (trong hàm hoặc phương thức).
Nhập toàn cầu
Nhập toàn cầu thực hiện ở đầu file và làm cho module được nhập khả dụng trong toàn bộ file.
import math
def calculate_circle_area(radius):
return math.pi * radius ** 2
Nhập cục bộ
Nhập cục bộ thực hiện trong hàm hoặc phương thức và làm cho module được nhập chỉ khả dụng trong hàm hoặc phương thức đó.
def calculate_square_root(x):
import math
return math.sqrt(x)
print(calculate_square_root(16))
Nhập cục bộ có thể hữu ích để giảm thời gian tải module hoặc để ngăn chặn xung đột tên.
1.4 Nhập động
Nhập động cho phép nhập các module trong thời gian thực hiện chương trình. Điều này có thể hữu ích khi cần nhập module dựa trên đầu vào của người dùng hoặc các điều kiện động khác.
Cú pháp chung của thao tác này có dạng:
module = __import__("module")
Hãy thử nhập module math theo cách này.
module_name = "math"
module = __import__(module_name)
print(module.sqrt(16)) # Xuất: 4.0
Làm việc với mã tiếp theo tương tự như sử dụng import as, khi module math được gán bí danh module.
1.5 Truy cập thuộc tính của module bằng cách sử dụng hàm getattr
Hàm getattr cho phép truy xuất động các thuộc tính từ module (hoặc bất kỳ đối tượng nào). Nó có thể hữu ích trong trường hợp, khi tên thuộc tính không được biết trước hoặc có thể thay đổi trong thời gian thực hiện chương trình.
Cú pháp của hàm getattr:
getattr(object, name, default = None)
Nơi object — là đối tượng, từ đó cần truy xuất thuộc tính, name — chuỗi chứa tên thuộc tính, còn default — giá trị được trả về trong trường hợp thuộc tính với tên được chỉ định không tồn tại. Giá trị mặc định cho tham số default — None.
Ví dụ sử dụng hàm getattr:
import math
# Truy xuất thuộc tính sqrt từ module math
sqrt_function = getattr(math, 'sqrt')
print(sqrt_function(25)) # Xuất: 5.0
# Cố gắng truy xuất thuộc tính không tồn tại, trả về giá trị mặc định
non_existent_attr = getattr(math, 'non_existent', 'default_value')
print(non_existent_attr) # Xuất: default_value
Trong ví dụ này, chúng ta sử dụng hàm getattr để truy xuất hàm sqrt từ module math, sau đó gọi hàm này để tính toán căn bậc hai của số 25. Trong trường hợp nếu thuộc tính với tên được chỉ định không tồn tại, giá trị mặc định default_value được trả về.
GO TO FULL VERSION