Thư viện nhâm nhi python
Mô-đun và gói là những cấp độ quản lý mã cao hơn trong Python. Mô-đun cho phép lưu trữ hàm (và mã khác) trên các tệp riêng rẽ để sau đó tái sử dụng trong các tệp và dự án khác. Gói cho phép nhóm các mô-đun lại với nhau. Sử dụng mô-đun và gói giúp bạn dễ dàng quản lý mã trong các chương trình lớn cũng như tái sử dụng mã về sau Show ĐỘI DUNG CỦA BẢN DỊCH Ẩn 1. Ví dụ sử dụng mô-đun trong Python 2. Mô-đun trong Python 3. Sử dụng mô-đun với nhập … 4. Sử dụng mô-đun với from … import … 5. Mô-đun thực thi 6. Vấn đề đường dẫn khi sử dụng mô-đun 7. Sử dụng gói trong Python 8. Kết luận Ví dụ sử dụng module trong PythonHãy bắt đầu với một ví dụ minh họa. Tạo hai tệp import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)8 và import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)9 trong cùng một thư mục và viết mã như sau print('--- start of my_math ---') PI = 3.14159 E = 2.71828 message = 'My 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 sum_range(start, stop, step=1): ''' Calculate the sum of intergers Params: start:int, start range number stop:int, stop range number step:int, the step between value Returns: int ''' sum = 0 for i in range(start, stop, step): sum += i return sum def fact(n): '''Calculate the factorial of n Params: n:int Return: int ''' p = 1 for i in range(1, n + 1): p *= i return p print('--- start of my_math ---') import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E) You must run program from file main. py. Kết quả thu được như sau File import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)8 là một file script Python hoàn toàn bình thường. Trong tệp này định nghĩa một số hàm tính toán ( import my_math1, import my_math2, import my_math3) và một số biến ( import my_math4, import my_math5, import my_math6). Điểm khác biệt của tệp này là chỉ chứa định nghĩa hàm nhưng không sử dụng (gọi) hàm Trong tệp import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)9 chúng ta sử dụng các hàm đã xây dựng từ import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)8 To command import my_math9 at the first file. Đây là lệnh yêu cầu Python tải nội dung của tệp import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)8 khi chạy tập lệnh tệp import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)9 import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)62 và import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)63 là hai mô-đun trong Python Mô-đun trong PythonTrong Python, bất kỳ file script (file có đuôi py) đều được gọi là module. Khi bạn tạo một mã tệp Python mới, bạn đang tạo một mô-đun. Như vậy, ngay từ những bài học đầu tiên bạn đã xây dựng mô-đun Python Tên mô-đun là tên tệp (bỏ phần mở rộng py). Trong ví dụ ở phần trên, Mô-đun import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)62 viết trong tệp import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)8. Module import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)63 viết trong file import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)9 Mỗi mô-đun đều có thể được tải xuống và thực thi bởi trình thông dịch Python. Như ở trên, bạn có thể chạy module my_math và main riêng rẽ vì chúng đều là mã tệp Python hợp lệ Tuy nhiên, nếu bạn chạy module my_math thì sẽ không ra kết quả gì vì trong module này chúng ta chỉ định nghĩa các hàm và biến chứ không phải chúng ta không sử dụng. Đây là điểm khác biệt giữa my_math và main. trong my_math chỉ chứa khai báo (hàm/biến), trong chính chứa lời gọi Như vậy, cách thức xây dựng và cách sử dụng cho các mô-đun khác nhau. Có những mô-đun được xây dựng với vai trò cung cấp thư viện hàm cho mô-đun khác sử dụng. Có những mô-đun sử dụng chức năng định nghĩa trong các mô-đun khác Để sử dụng hàm/biến/định nghĩa dữ liệu trong tệp/mô-đun khác, Python sử dụng lệnh nhập. Có hai kiểu lệnh nhập khẩu khác nhau
Use module with import …Trong ví dụ minh họa chúng ta đã sử dụng lối viết này import my_math Cách viết này sẽ tải xuống toàn bộ mô-đun my_math, gần giống như việc sao chép nội dung của my_math. py set into the position of command import my_math9 and run program. Điều này có nghĩa là tất cả các lệnh trong mô-đun đều được thực hiện khi nhập Bạn có thể thấy điều này khi cặp lệnh print() viết ở đầu và cuối mô-đun my_math đều được thực hiện Cách này sẽ chỉ tải mô-đun khi nhập lệnh lần đầu tiên. Khi gặp lệnh nhập lần thứ hai, Python sẽ không tải mô-đun nữa. Bạn có thể thấy rõ điều này khi cặp lệnh print() ở đầu và cuối mô-đun my_math chỉ được gọi một lần duy nhất trước khi bắt đầu mô-đun chính mặc dù chúng ta viết lệnh import my_math9 hai lần Please for the way we call function and use variable (được khai báo trong module my_math) import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)6 Tức là, thay vì viết trực tiếp tên hàm/biến, bạn phải cung cấp thêm tên mô-đun my_math. Cấu hình chung cấu trúc để sử dụng một hàm/biến trong mô-đun khác là print('--- start of my_math ---') PI = 3.14159 E = 2.71828 message = 'My 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 sum_range(start, stop, step=1): ''' Calculate the sum of intergers Params: start:int, start range number stop:int, stop range number step:int, the step between value Returns: int ''' sum = 0 for i in range(start, stop, step): sum += i return sum def fact(n): '''Calculate the factorial of n Params: n:int Return: int ''' p = 1 for i in range(1, n + 1): p *= i return p print('--- start of my_math ---')82 và print('--- start of my_math ---') PI = 3.14159 E = 2.71828 message = 'My 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 sum_range(start, stop, step=1): ''' Calculate the sum of intergers Params: start:int, start range number stop:int, stop range number step:int, the step between value Returns: int ''' sum = 0 for i in range(start, stop, step): sum += i return sum def fact(n): '''Calculate the factorial of n Params: n:int Return: int ''' p = 1 for i in range(1, n + 1): p *= i return p print('--- start of my_math ---')83 You can use alias in command as after print('--- start of my_math ---') PI = 3.14159 E = 2.71828 message = 'My 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 sum_range(start, stop, step=1): ''' Calculate the sum of intergers Params: start:int, start range number stop:int, stop range number step:int, the step between value Returns: int ''' sum = 0 for i in range(start, stop, step): sum += i return sum def fact(n): '''Calculate the factorial of n Params: n:int Return: int ''' p = 1 for i in range(1, n + 1): p *= i return p print('--- start of my_math ---')8 Tên print('--- start of my_math ---') PI = 3.14159 E = 2.71828 message = 'My 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 sum_range(start, stop, step=1): ''' Calculate the sum of intergers Params: start:int, start range number stop:int, stop range number step:int, the step between value Returns: int ''' sum = 0 for i in range(start, stop, step): sum += i return sum def fact(n): '''Calculate the factorial of n Params: n:int Return: int ''' p = 1 for i in range(1, n + 1): p *= i return p print('--- start of my_math ---')84 trong lệnh trên được gọi là bí danh (tên giả) của import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)62. Khi điều này thay vì sử dụng tên mô-đun my_math, bạn có thể sử dụng bí danh mm như sau import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)3 Nghĩa là bạn có thể sử dụng bí danh thay cho tên mô-đun. Bạn có thể đồng thời sử dụng cả tên mô-đun và bí danh Bí danh rất tiện lợi khi tên mô-đun quá dài hoặc tên mô-đun trùng lặp với một hàm/biến có sẵn của Python Use module with from … import …Giờ hãy xóa (hoặc nhận xét) toàn bộ mã của mã chính. py và viết lại mã mới như sau import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)4 Ở đây chúng ta gặp cách sử dụng thứ hai của nhập khẩu. print('--- start of my_math ---') PI = 3.14159 E = 2.71828 message = 'My 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 sum_range(start, stop, step=1): ''' Calculate the sum of intergers Params: start:int, start range number stop:int, stop range number step:int, the step between value Returns: int ''' sum = 0 for i in range(start, stop, step): sum += i return sum def fact(n): '''Calculate the factorial of n Params: n:int Return: int ''' p = 1 for i in range(1, n + 1): p *= i return p print('--- start of my_math ---')86 Khi sử dụng cấu trúc từ. nhập bạn có thể thấy rằng Python vẫn nhập toàn bộ mã của mô-đun my_math (như trường hợp sử dụng import my_math9). Điều này có thể thực hiện thông qua hai lệnh print() ở đầu và cuối mô-đun my_math đều được thực hiện ở vị trí gọi từ. nhập khẩu Tuy nhiên, giờ đây bạn không thể sử dụng được tất cả các hàm/biến số của mô-đun my_math như trước đây nữa. Giờ bạn chỉ có thể sử dụng hàm print('--- start of my_math ---') PI = 3.14159 E = 2.71828 message = 'My 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 sum_range(start, stop, step=1): ''' Calculate the sum of intergers Params: start:int, start range number stop:int, stop range number step:int, the step between value Returns: int ''' sum = 0 for i in range(start, stop, step): sum += i return sum def fact(n): '''Calculate the factorial of n Params: n:int Return: int ''' p = 1 for i in range(1, n + 1): p *= i return p print('--- start of my_math ---')88, print('--- start of my_math ---') PI = 3.14159 E = 2.71828 message = 'My 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 sum_range(start, stop, step=1): ''' Calculate the sum of intergers Params: start:int, start range number stop:int, stop range number step:int, the step between value Returns: int ''' sum = 0 for i in range(start, stop, step): sum += i return sum def fact(n): '''Calculate the factorial of n Params: n:int Return: int ''' p = 1 for i in range(1, n + 1): p *= i return p print('--- start of my_math ---')89, và biến import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)30 Điều đặc biệt là bạn có thể sử dụng tên rút gọn của các đối tượng này (không cần đặt tên mô-đun), giống như khi các đối tượng này được khai báo trực tiếp trong mô-đun chính import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)0 Bạn cũng có thể chỉ định bí danh cho từng tên gọi trong lệnh từ. nhập khẩu như sau import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)1 Ở đây khi nhập chúng ta chỉ định alias sr cho hàm sum_range(), f cho hàm fact(), msg cho biến thông báo. Trong mã sau đó chúng ta có thể sử dụng bí danh thay cho tên thật Lưu ý, nếu bạn đã đặt bí danh thì không thể sử dụng tên thật của đối tượng được nữa. Tức là không thể đồng thời sử dụng bí danh và tên thật Bạn cũng có thể sử dụng cách nhập như sau import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)2 Tuy nhiên, đây là cách thức không được khuyến khích. Nó dễ dàng làm rối loạn không gian tên của mô-đun hiện tại nếu có quá nhiều tên gọi được nhập Go to the general output effect, both way import near as are compatible nhau. Sự khác biệt chỉ nằm ở cách sử dụng các đối tượng từ mô-đun. Thực hiện mô-đun thiKhi xây dựng một mô-đun, bạn có thể dự đoán tình trạng phòng hai
Mỗi mô-đun có một thuộc tính đặc biệt tên là import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)32. Lưu ý có hai dấu _ trước và sau tên. You can try in a command import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)33 Khi một mô-đun được thực thi trực tiếp, import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)32 sẽ được gán giá trị cho import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)35. Nếu khi thực hiện một mô-đun mà import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)36‘ thì đây là mô-đun chủ của chương trình Khi một mô-đun được thực thi gián tiếp, thì import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)32 của nó sẽ có giá trị là tên mô-đun (cũng là tên tệp bỏ qua phần mở rộng py) Với đặc thù trên, khi xây dựng mô-đun trong Python cần chạy ở cả hai kiểu (trực tiếp và gián tiếp) người ta thường sử dụng mẫu sau đây
import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)0 Khi chạy gián tiếp thông qua nhập khẩu import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)32 sẽ không thể có giá trị của import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)41, vì logic của import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)38 sẽ không thực thi Khi một mô-đun được chạy gián tiếp thông qua quá trình nhập, Python cũng thực hiện lưu bản dịch bytecode tạm thời của nó trong thư mục import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)43. Thư mục import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)43 nằm trong cùng thư mục với mô-đun được nhập. Ví dụ, với mô-đun import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)62, khi được nhập, Python sẽ tạo ra tệp import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)46 (nếu bạn sử dụng Python 3. số 8). Nếu bạn có nhiều phiên bản Python khác nhau, khi chạy với bất kỳ phiên bản nào, tệp pyc sẽ có tên ứng dụng tương ứng Nhắc lại. khi chạy một script, Python sẽ dịch nó thành bytecode trung gian. Chương trình máy ảo của Python sẽ tiếp tục chuyển mã bytecode thành mã máy để thực thi trên từng hệ điều hành Tệp bytecode của Python có phần mở rộng là pyc Khi nhập một mô-đun xảy ra quá trình dịch bytecode như vậy. Tuy nhiên, Python sẽ lưu lại tệp pyc để lần sau không cần dịch lại. Việc lưu trữ tệp pyc giúp giảm thời gian tải xuống một chương trình Lưu ý, khi trực tiếp thực hiện một mô-đun Python sẽ không lưu lại mã byte của tệp Tệp bytecode không thực thi nhanh hơn. Nó chỉ giảm thời gian tải ứng dụng Vì lý do này, khi xây dựng chương trình bằng Python, bạn nên tận hưởng việc xây dựng và nhập mô-đun, thay vì mã trực tiếp trong một mô-đun chính lớn. Toàn bộ mã nên đưa về các mô-đun và để mô-đun chính đơn giản nhất có thể Đường dẫn vấn đề khi sử dụng mô-đunBạn có thể thấy khi nhập mô-đun, bạn không chỉ định đường dẫn đến tệp script. Python thực hiện việc tìm mô-đun tệp tìm kiếm tự động theo các thư mục lưu trong biến sys. con đường biến hệ thống. đường dẫn là một danh sách lưu các đường dẫn đã được đăng ký trong Python. You can see content of sys. path as after import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)1 Bạn có thể chỉ định đường dẫn ban đầu chính là thư mục làm việc (thư mục hiện hành) nơi bạn đặt mô-đun tệp chính. Ví dụ, nếu bạn chạy module main. py and in main. py has command import my_math, Python before hết will find my_math search. py trong thư mục chứa main. py Nếu không tìm thấy tệp tương ứng, Python sẽ tìm lần nữa trong các thư mục còn lại Để giải quyết một vấn đề khác. Giả sử bạn có mô-đun mysql nằm trong tệp import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)47 nằm trong thư mục con import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)48 của thư mục hiện hành (tức là đường dẫn tương đối tới tệp là import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)49) Để nhập mô-đun mysql, bạn cần viết như sau. import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)00. Tức là bạn cần chỉ định cấu trúc đường dẫn tương đối tới mô-đun. Sự khác biệt ở chỗ các phần của đường dẫn được phân tách bằng dấu chấm. Python sẽ tự động ghép đường dẫn này với các đường dẫn được lưu trong import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)01 Nếu trong trường hợp các mô-đun tệp của bạn nằm ở một nơi khác (không nằm trong danh sách hệ thống. đường dẫn mặc định), bạn phải có đường dẫn chỉ định để Python có thể tìm thấy. Cách đơn giản nhất như sau import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)2 Logic ở đây rất đơn giản. làm hệ thống. đường dẫn chỉ là một danh sách, bạn có thể tự thêm một đường dẫn mới vào sys. con đường. Khi đó Python sẽ tìm kiếm cả trong đường dẫn bạn thêm vào Ví dụ import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)3 Sử dụng package trong PythonTrong Python, một số mô-đun trong cùng thư mục (và thư mục con) có thể kết hợp lại để tạo ra một gói. Gói giúp đơn giản hóa hơn nữa việc sử dụng nhiều mô-đun có liên quan Hãy cùng thực hiện ví dụ sau Create my_package directory. Trong thư mục này, tạo hai tệp module1. py và module2. py with code as after import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)4 import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)5 Nếu dừng lại ở đây, bạn sẽ có hai mô-đun riêng rẽ. Khi sử dụng bạn cần nhập từng mô-đun Giờ hãy tạo tệp __init__. py in my_package directory. Lưu ý có hai ký tự _ ở trước và sau init. Viết mã như sau cho __init__. py import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)6 Đây là hai lệnh nhập thông thường mà bạn đã học ở phần trên. Bạn có thể sử dụng kiểu nhập khẩu nào cũng được. Tuy nhiên, cần lưu ý về cách viết tên mô-đun. import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)02. Bạn cần chỉ định tên thư mục, nếu không Python sẽ không tìm thấy mô-đun tương ứng Tên tệp __init__. py có ý nghĩa đặc biệt trong Python. Nếu Python nhìn thấy bất kỳ thư mục nào có tệp có tên gọi là __init__. py, nó sẽ tự động coi thư mục này là một gói, chứ không còn là thư mục bình thường nữa Bên ngoài thư mục gói hãy tạo mô-đun chính. py and write code as after import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)7 Bạn có thể để ý thấy ngay rằng lệnh nhập giờ không hoạt động với từng mô-đun nữa mà là với tên thư mục my_package Tất cả các thư mục chứa tệp __init__. py sẽ trở thành một gói. Tên thư mục trở thành tên gói và có thể sử dụng cùng lệnh nhập hoặc từ/nhập Khi nhập một gói, bạn sẽ đồng thời nhập tất cả các mô-đun của nó (được chỉ định trong __init__. py) Nếu sử dụng lệnh import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)03, bạn truy cập vào các hàm của từng mô-đun qua cú pháp import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)04 Nếu sử dụng từ import my_math print(my_math.message) sum = my_math.sum(0, 1, 2, 3, 4) sum_range = my_math.sum_range(1, 10) fact = my_math.fact(3) print('sum = ', sum) print('sum_range = ', sum_range) print('fact = ', fact) print('Pi = ', my_math.PI) print('e = ', my_math.E)05, bạn có thể sử dụng tên rút gọn của hàm như bình thường Lưu ý. trong __init__. py và trong gói sử dụng mô-đun nên sử dụng cùng một cách nhập. Ví dụ, cùng sử dụng nhập hoặc cùng sử dụng từ. nhập khẩu |