Giới thiệu về Python
Nắm vững kiến thức cơ bản về phân tích dữ liệu với Python chỉ trong bốn giờ. Khóa học trực tuyến này sẽ giới thiệu giao diện Python và khám phá các gói phổ biến
Python trung gian
Nâng cao kỹ năng khoa học dữ liệu của bạn bằng cách tạo trực quan hóa bằng Matplotlib và thao tác với DataFrames bằng gấu trúcBài viết này khám phá các mô-đun Python và các gói Python, hai cơ chế hỗ trợ lập trình mô-đun
Lập trình mô-đun đề cập đến quá trình chia một nhiệm vụ lập trình lớn, khó sử dụng thành các nhiệm vụ hoặc mô-đun riêng biệt, nhỏ hơn, dễ quản lý hơn. Các mô-đun riêng lẻ sau đó có thể được ghép lại với nhau như các khối xây dựng để tạo ra một ứng dụng lớn hơn
Có một số lợi thế để mô đun hóa mã trong một ứng dụng lớn
Sự đơn giản. Thay vì tập trung vào toàn bộ vấn đề hiện tại, một mô-đun thường tập trung vào một phần tương đối nhỏ của vấn đề. Nếu bạn đang làm việc trên một mô-đun duy nhất, bạn sẽ có một miền vấn đề nhỏ hơn để xoay sở. Điều này làm cho việc phát triển dễ dàng hơn và ít bị lỗi hơn
khả năng bảo trì. Các mô-đun thường được thiết kế sao cho chúng thực thi các ranh giới logic giữa các miền vấn đề khác nhau. Nếu các mô-đun được viết theo cách giảm thiểu sự phụ thuộc lẫn nhau, thì sẽ giảm khả năng sửa đổi một mô-đun sẽ có tác động đến các phần khác của chương trình. [Bạn thậm chí có thể thực hiện các thay đổi đối với một mô-đun mà không cần biết bất kỳ kiến thức nào về ứng dụng bên ngoài mô-đun đó. ] Điều này làm cho một nhóm gồm nhiều lập trình viên có thể làm việc cộng tác trên một ứng dụng lớn trở nên khả thi hơn
khả năng tái sử dụng. Có thể dễ dàng sử dụng lại chức năng được xác định trong một mô-đun duy nhất [thông qua giao diện được xác định phù hợp] bởi các phần khác của ứng dụng. Điều này giúp loại bỏ nhu cầu sao chép mã
phạm vi. Các mô-đun thường xác định một không gian tên riêng biệt, giúp tránh xung đột giữa các mã định danh trong các khu vực khác nhau của chương trình. [Một trong những nguyên lý trong Zen of Python là Không gian tên là một ý tưởng tuyệt vời—hãy làm nhiều hơn thế nữa. ]
Các chức năng, mô-đun và gói đều là các cấu trúc trong Python thúc đẩy quá trình mô đun hóa mã
Tải xuống PDF miễn phí. Bảng cheat Python 3
Mô-đun Python. Tổng quan
Thực tế, có ba cách khác nhau để xác định một mô-đun trong Python
- Một mô-đun có thể được viết bằng chính Python
- Một mô-đun có thể được viết bằng C và được tải động trong thời gian chạy, như mô-đun
6 [biểu thức chính quy]>>> import mod >>> mod
- Một mô-đun tích hợp về bản chất được chứa trong trình thông dịch, như mô-đun
7>>> import mod >>> mod
Nội dung của mô-đun được truy cập theo cùng một cách trong cả ba trường hợp. với câu lệnh
>>> import mod
>>> mod
8Ở đây, trọng tâm chủ yếu sẽ là các mô-đun được viết bằng Python. Điều thú vị về các mô-đun được viết bằng Python là chúng cực kỳ đơn giản để xây dựng. Tất cả những gì bạn cần làm là tạo một tệp chứa mã Python hợp pháp, sau đó đặt tên cho tệp có phần mở rộng
>>> import mod
>>> mod
9. Đó là nó. Không có cú pháp đặc biệt hoặc voodoo là cần thiếtVí dụ: giả sử bạn đã tạo một tệp có tên
>>> s
NameError: name 's' is not defined
>>> foo['quux']
NameError: name 'foo' is not defined
0 chứa các nội dung sauchế độ. py
s = "If Comrade Napoleon says it, it must be right."
a = [100, 200, 300]
def foo[arg]:
print[f'arg = {arg}']
class Foo:
pass
Một số đối tượng được định nghĩa trong
>>> s
NameError: name 's' is not defined
>>> foo['quux']
NameError: name 'foo' is not defined
0
2 [một chuỗi]>>> s NameError: name 's' is not defined >>> foo['quux'] NameError: name 'foo' is not defined
3 [một danh sách]>>> s NameError: name 's' is not defined >>> foo['quux'] NameError: name 'foo' is not defined
4 [một chức năng]>>> s NameError: name 's' is not defined >>> foo['quux'] NameError: name 'foo' is not defined
5 [một lớp học]>>> s NameError: name 's' is not defined >>> foo['quux'] NameError: name 'foo' is not defined
Giả sử
>>> s
NameError: name 's' is not defined
>>> foo['quux']
NameError: name 'foo' is not defined
0 ở một vị trí thích hợp mà bạn sẽ sớm tìm hiểu thêm, những đối tượng này có thể được truy cập bằng cách nhập mô-đun như sau>>>
>>> import mod
>>> mod
2Loại bỏ các quảng cáoĐường dẫn tìm kiếm mô-đun
Tiếp tục với ví dụ trên, hãy xem điều gì sẽ xảy ra khi Python thực thi câu lệnh
>>> import mod
>>> mod
3Khi trình thông dịch thực thi câu lệnh
>>> import mod
>>> mod
8 ở trên, nó sẽ tìm kiếm >>> s
NameError: name 's' is not defined
>>> foo['quux']
NameError: name 'foo' is not defined
0 trong danh sách các thư mục được tập hợp từ các nguồn sau- Thư mục chạy tập lệnh đầu vào hoặc thư mục hiện tại nếu trình thông dịch đang được chạy tương tác
- Danh sách các thư mục chứa trong biến môi trường
9, nếu nó được đặt. [Định dạng cho>>> s NameError: name 's' is not defined >>> foo['quux'] NameError: name 'foo' is not defined
9 phụ thuộc vào hệ điều hành nhưng phải bắt chước biến môi trường>>> s NameError: name 's' is not defined >>> foo['quux'] NameError: name 'foo' is not defined
81. ]>>> import mod >>> mod
- Danh sách các thư mục phụ thuộc vào cài đặt được định cấu hình tại thời điểm Python được cài đặt
Đường dẫn tìm kiếm kết quả có thể truy cập được trong biến Python
>>> import mod
>>> mod
82, được lấy từ một mô-đun có tên >>> import mod
>>> mod
83>>>
>>> import mod
>>> mod
1Ghi chú. Nội dung chính xác của
>>> import mod
>>> mod
82 phụ thuộc vào cài đặt. Phần trên gần như chắc chắn sẽ trông hơi khác trên máy tính của bạnVì vậy, để đảm bảo tìm thấy mô-đun của bạn, bạn cần thực hiện một trong các thao tác sau
- Đặt
0 vào thư mục chứa tập lệnh đầu vào hoặc thư mục hiện tại, nếu tương tác>>> s NameError: name 's' is not defined >>> foo['quux'] NameError: name 'foo' is not defined
- Sửa đổi biến môi trường
9 để chứa thư mục chứa>>> s NameError: name 's' is not defined >>> foo['quux'] NameError: name 'foo' is not defined
0 trước khi bắt đầu trình thông dịch>>> s NameError: name 's' is not defined >>> foo['quux'] NameError: name 'foo' is not defined
- Hoặc. Đặt
0 vào một trong các thư mục đã có trong biến>>> s NameError: name 's' is not defined >>> foo['quux'] NameError: name 'foo' is not defined
9>>> s NameError: name 's' is not defined >>> foo['quux'] NameError: name 'foo' is not defined
- Hoặc. Đặt
- Đặt
0 vào một trong các thư mục phụ thuộc vào cài đặt mà bạn có thể có hoặc không có quyền ghi vào, tùy thuộc vào hệ điều hành>>> s NameError: name 's' is not defined >>> foo['quux'] NameError: name 'foo' is not defined
Thực sự có một tùy chọn bổ sung. bạn có thể đặt tệp mô-đun vào bất kỳ thư mục nào bạn chọn và sau đó sửa đổi
>>> import mod
>>> mod
82 trong thời gian chạy để nó chứa thư mục đó. Ví dụ, trong trường hợp này, bạn có thể đặt >>> s
NameError: name 's' is not defined
>>> foo['quux']
NameError: name 'foo' is not defined
0 trong thư mục >>> import mod
>>> mod
203 và sau đó đưa ra các câu lệnh sau>>>
>>> import mod
>>> mod
2Khi một mô-đun đã được nhập, bạn có thể xác định vị trí tìm thấy mô-đun bằng thuộc tính
>>> import mod
>>> mod
204 của mô-đun>>>
>>> import mod
>>> mod
4Phần thư mục của
>>> import mod
>>> mod
204 phải là một trong các thư mục trong >>> import mod
>>> mod
82Tuyên bố >>> import mod
>>> mod
8
>>> import mod
>>> mod
Nội dung mô-đun được cung cấp cho người gọi với câu lệnh
>>> import mod
>>> mod
8. Câu lệnh >>> import mod
>>> mod
8 có nhiều dạng khác nhau, được hiển thị bên dưới>>> import mod
>>> mod
210
>>> import mod
>>> mod
Hình thức đơn giản nhất là hình thức đã được hiển thị ở trên
>>> s
NameError: name 's' is not defined
>>> foo['quux']
NameError: name 'foo' is not defined
1Lưu ý rằng điều này không làm cho nội dung mô-đun có thể truy cập trực tiếp vào người gọi. Mỗi mô-đun có bảng ký hiệu riêng, đóng vai trò là bảng ký hiệu chung cho tất cả các đối tượng được xác định trong mô-đun. Do đó, một mô-đun tạo một không gian tên riêng, như đã lưu ý
Câu lệnh
>>> import mod
>>> mod
210 chỉ đặt >>> import mod
>>> mod
212 trong bảng ký hiệu của người gọi. Các đối tượng được xác định trong mô-đun vẫn còn trong bảng ký hiệu riêng của mô-đunTừ trình gọi, các đối tượng trong mô-đun chỉ có thể truy cập được khi có tiền tố là
>>> import mod
>>> mod
212 thông qua ký hiệu dấu chấm, như minh họa bên dướiSau câu lệnh
>>> import mod
>>> mod
8 sau, >>> import mod
>>> mod
215 được đặt vào bảng ký hiệu cục bộ. Do đó, >>> import mod
>>> mod
215 có ý nghĩa trong ngữ cảnh địa phương của người gọi>>>
>>> import mod
>>> mod
Nhưng
>>> s
NameError: name 's' is not defined
>>> foo['quux']
NameError: name 'foo' is not defined
2 và >>> import mod
>>> mod
218 vẫn nằm trong bảng ký hiệu riêng của mô-đun và không có ý nghĩa trong ngữ cảnh địa phương>>>
>>> s
NameError: name 's' is not defined
>>> foo['quux']
NameError: name 'foo' is not defined
Để được truy cập trong ngữ cảnh cục bộ, tên của các đối tượng được xác định trong mô-đun phải có tiền tố là
>>> import mod
>>> mod
215>>>
>>> import mod
>>> mod
8Một số mô-đun được phân tách bằng dấu phẩy có thể được chỉ định trong một câu lệnh
>>> import mod
>>> mod
8>>> import mod
>>> mod
20Loại bỏ các quảng cáo>>> import mod
>>> mod
221
>>> import mod
>>> mod
Một dạng thay thế của câu lệnh
>>> import mod
>>> mod
8 cho phép các đối tượng riêng lẻ từ mô-đun được nhập trực tiếp vào bảng ký hiệu của người gọi>>> import mod
>>> mod
21Sau khi thực hiện câu lệnh trên,
>>> import mod
>>> mod
223 có thể được tham chiếu trong môi trường của người gọi mà không cần tiền tố >>> import mod
>>> mod
212>>>
>>> import mod
>>> mod
22Vì dạng
>>> import mod
>>> mod
8 này đặt tên đối tượng trực tiếp vào bảng ký hiệu của người gọi, bất kỳ đối tượng nào đã tồn tại có cùng tên sẽ bị ghi đè>>>
>>> import mod
>>> mod
23Thậm chí có thể
>>> import mod
>>> mod
8 bừa bãi mọi thứ từ một mô-đun ngay lập tức>>> import mod
>>> mod
24Điều này sẽ đặt tên của tất cả các đối tượng từ
>>> import mod
>>> mod
212 vào bảng ký hiệu cục bộ, ngoại trừ bất kỳ đối tượng nào bắt đầu bằng ký tự gạch dưới [>>> import mod
>>> mod
228]Ví dụ
>>>
>>> import mod
>>> mod
25Điều này không nhất thiết được khuyến nghị trong mã sản xuất quy mô lớn. Hơi nguy hiểm vì bạn đang nhập tên vào bảng ký hiệu cục bộ hàng loạt. Trừ khi bạn biết rõ tất cả chúng và có thể tự tin rằng sẽ không có xung đột, nếu không bạn sẽ có cơ hội vô tình ghi đè lên một tên hiện có. Tuy nhiên, cú pháp này khá tiện dụng khi bạn chỉ loay hoay với trình thông dịch tương tác, cho mục đích thử nghiệm hoặc khám phá, bởi vì nó nhanh chóng cho phép bạn truy cập vào mọi thứ mà một mô-đun cung cấp mà không cần gõ nhiều
>>> import mod
>>> mod
229
>>> import mod
>>> mod
Cũng có thể
>>> import mod
>>> mod
8 đối tượng riêng lẻ nhưng nhập chúng vào bảng ký hiệu cục bộ với các tên thay thế>>> import mod
>>> mod
26Điều này cho phép đặt tên trực tiếp vào bảng ký hiệu cục bộ nhưng tránh xung đột với các tên đã tồn tại trước đó
>>>
>>> import mod
>>> mod
27>>> import mod
>>> mod
231
>>> import mod
>>> mod
Bạn cũng có thể nhập toàn bộ mô-đun dưới tên thay thế
>>> import mod
>>> mod
28>>>
>>> import mod
>>> mod
29Nội dung mô-đun có thể được nhập từ bên trong định nghĩa hàm. Trong trường hợp đó,
>>> import mod
>>> mod
8 không xảy ra cho đến khi hàm được gọi>>>
>>> import mod
>>> mod
30Tuy nhiên, Python 3 không cho phép cú pháp
>>> import mod
>>> mod
233 bừa bãi từ bên trong một hàm>>>
>>> import mod
>>> mod
31Cuối cùng, một câu lệnh
>>> import mod
>>> mod
234 với mệnh đề >>> import mod
>>> mod
235 có thể được sử dụng để bảo vệ chống lại nỗ lực >>> import mod
>>> mod
8 không thành công>>>
>>> import mod
>>> mod
32>>>
>>> import mod
>>> mod
33Loại bỏ các quảng cáoHàm >>> import mod
>>> mod
237
>>> import mod
>>> mod
Hàm tích hợp sẵn
>>> import mod
>>> mod
237 trả về danh sách các tên đã xác định trong một không gian tên. Không có đối số, nó tạo ra một danh sách các tên được sắp xếp theo thứ tự bảng chữ cái trong bảng ký hiệu cục bộ hiện tại>>>
>>> import mod
>>> mod
34Lưu ý cách gọi đầu tiên tới
>>> import mod
>>> mod
237 ở trên liệt kê một số tên được xác định tự động và đã có trong không gian tên khi trình thông dịch bắt đầu. Khi các tên mới được xác định [>>> import mod
>>> mod
240, >>> import mod
>>> mod
241, >>> import mod
>>> mod
242], chúng sẽ xuất hiện trong các lần gọi tiếp theo của >>> import mod
>>> mod
237Điều này có thể hữu ích để xác định chính xác những gì đã được thêm vào không gian tên bằng một câu lệnh nhập
>>>
>>> import mod
>>> mod
35Khi đưa ra một đối số là tên của một mô-đun,
>>> import mod
>>> mod
237 sẽ liệt kê các tên được xác định trong mô-đun>>>
>>> import mod
>>> mod
36>>>
>>> import mod
>>> mod
37Thực thi một Mô-đun dưới dạng Tập lệnh
Bất kỳ tệp
>>> import mod
>>> mod
9 nào chứa mô-đun về cơ bản cũng là một tập lệnh Python và không có lý do gì mà nó không thể được thực thi như mộtĐây lại là
>>> s
NameError: name 's' is not defined
>>> foo['quux']
NameError: name 'foo' is not defined
0 như đã định nghĩa ở trênchế độ. py
s = "If Comrade Napoleon says it, it must be right."
a = [100, 200, 300]
def foo[arg]:
print[f'arg = {arg}']
class Foo:
pass
Điều này có thể được chạy như một tập lệnh
>>> import mod
>>> mod
39Không có lỗi, vì vậy nó rõ ràng đã hoạt động. Cấp, nó không phải là rất thú vị. Khi nó được viết, nó chỉ định nghĩa các đối tượng. Nó không làm bất cứ điều gì với chúng và nó không tạo ra bất kỳ đầu ra nào
Hãy sửa đổi mô-đun Python ở trên để nó tạo ra một số đầu ra khi chạy dưới dạng tập lệnh
chế độ. py
>>> import mod
>>> mod
10Bây giờ nó sẽ thú vị hơn một chút
>>> import mod
>>> mod
11Thật không may, bây giờ nó cũng tạo đầu ra khi được nhập dưới dạng mô-đun
>>>
>>> import mod
>>> mod
12Đây có lẽ không phải là những gì bạn muốn. Mô-đun không thường tạo đầu ra khi được nhập
Sẽ thật tuyệt nếu bạn có thể phân biệt giữa thời điểm tệp được tải dưới dạng mô-đun và khi tệp được chạy dưới dạng tập lệnh độc lập?
Hỏi và ngươi sẽ nhận được
Khi một tệp
>>> import mod
>>> mod
9 được nhập dưới dạng một mô-đun, Python đặt biến dunder đặc biệt >>> import mod
>>> mod
248 thành tên của mô-đun. Tuy nhiên, nếu một tệp được chạy dưới dạng tập lệnh độc lập, thì >>> import mod
>>> mod
248 được đặt [một cách sáng tạo] thành chuỗi >>> import mod
>>> mod
250. Sử dụng thực tế này, bạn có thể phân biệt trường hợp nào xảy ra trong thời gian chạy và thay đổi hành vi cho phù hợpchế độ. py
>>> import mod
>>> mod
13Bây giờ, nếu bạn chạy dưới dạng tập lệnh, bạn sẽ nhận được kết quả
>>> import mod
>>> mod
14Nhưng nếu bạn nhập dưới dạng mô-đun, bạn không
>>>
>>> import mod
>>> mod
15Các mô-đun thường được thiết kế với khả năng chạy dưới dạng tập lệnh độc lập nhằm mục đích kiểm tra chức năng có trong mô-đun. Điều này được gọi là thử nghiệm đơn vị. Ví dụ: giả sử bạn đã tạo mô-đun
>>> import mod
>>> mod
251 chứa hàm giai thừa, như sauthực tế. py
>>> import mod
>>> mod
16Tệp có thể được coi là một mô-đun và hàm
>>> import mod
>>> mod
252 đã được nhập>>>
>>> import mod
>>> mod
17Nhưng nó cũng có thể được chạy độc lập bằng cách chuyển một đối số số nguyên trên dòng lệnh để kiểm tra
>>> import mod
>>> mod
18Loại bỏ các quảng cáoTải lại một mô-đun
Vì lý do hiệu quả, một mô-đun chỉ được tải một lần cho mỗi phiên phiên dịch. Điều đó tốt cho các định nghĩa hàm và lớp, thường chiếm phần lớn nội dung của mô-đun. Nhưng một mô-đun cũng có thể chứa các câu lệnh thực thi, thường là để khởi tạo. Xin lưu ý rằng các câu lệnh này sẽ chỉ được thực thi khi lần đầu tiên một mô-đun được nhập
Xem xét tệp sau
>>> s
NameError: name 's' is not defined
>>> foo['quux']
NameError: name 'foo' is not defined
0chế độ. py
>>> import mod
>>> mod
19>>>
>>> import mod
>>> mod
20Câu lệnh
>>> import mod
>>> mod
254 không được thực hiện trong các lần nhập tiếp theo. [Đối với vấn đề đó, câu lệnh gán cũng vậy, nhưng khi hiển thị cuối cùng giá trị của >>> import mod
>>> mod
255 cho thấy, điều đó không thành vấn đề. Một khi nhiệm vụ được thực hiện, nó dính. ]Nếu bạn thực hiện thay đổi đối với một mô-đun và cần tải lại mô-đun đó, bạn cần khởi động lại trình thông dịch hoặc sử dụng một hàm có tên là
>>> import mod
>>> mod
256 từ mô-đun >>> import mod
>>> mod
257>>>
>>> import mod
>>> mod
21Gói Python
Giả sử bạn đã phát triển một ứng dụng rất lớn bao gồm nhiều mô-đun. Khi số lượng mô-đun tăng lên, việc theo dõi tất cả chúng trở nên khó khăn nếu chúng được đổ vào một vị trí. Điều này đặc biệt đúng nếu chúng có tên hoặc chức năng tương tự nhau. Bạn có thể muốn có một phương tiện để nhóm và tổ chức chúng
Các gói cho phép cấu trúc phân cấp của không gian tên mô-đun bằng cách sử dụng ký hiệu dấu chấm. Cũng giống như cách mà các mô-đun giúp tránh xung đột giữa các tên biến toàn cục, các gói giúp tránh xung đột giữa các tên mô-đun
Việc tạo một gói khá đơn giản vì nó sử dụng cấu trúc tệp phân cấp vốn có của hệ điều hành. Xét cách sắp xếp sau
Ở đây, có một thư mục tên là
>>> import mod
>>> mod
258 chứa hai mô-đun, >>> import mod
>>> mod
259 và >>> import mod
>>> mod
260. Nội dung của các mô-đun làmod1. py
>>> import mod
>>> mod
22mod2. py
>>> import mod
>>> mod
23Với cấu trúc này, nếu thư mục
>>> import mod
>>> mod
258 nằm ở vị trí có thể tìm thấy nó [tại một trong các thư mục có trong >>> import mod
>>> mod
82], bạn có thể tham khảo hai mô-đun có ký hiệu dấu chấm [>>> import mod
>>> mod
263, >>> import mod
>>> mod
264] và nhập chúng bằng cú pháp bạn >>> import mod
>>> mod
20>>>
>>> import mod
>>> mod
25>>> import mod
>>> mod
21>>>
>>> import mod
>>> mod
27>>> import mod
>>> mod
28>>>
>>> import mod
>>> mod
29Bạn cũng có thể nhập các mô-đun với các câu lệnh này
>>> import mod
>>> mod
40>>>
>>> import mod
>>> mod
41Về mặt kỹ thuật, bạn cũng có thể nhập gói
>>>
>>> import mod
>>> mod
42Nhưng điều này ít có ích. Mặc dù nói một cách nghiêm túc, đây là một câu lệnh Python đúng về mặt cú pháp, nhưng nó không làm được gì nhiều hữu ích. Đặc biệt, nó không đặt bất kỳ mô-đun nào trong
>>> import mod
>>> mod
258 vào không gian tên cục bộ>>>
>>> import mod
>>> mod
43Để thực sự nhập các mô-đun hoặc nội dung của chúng, bạn cần sử dụng một trong các biểu mẫu được hiển thị ở trên
Loại bỏ các quảng cáoKhởi tạo gói
Nếu một tệp có tên
>>> import mod
>>> mod
266 có trong thư mục gói, tệp đó sẽ được gọi khi gói hoặc mô-đun trong gói được nhập. Điều này có thể được sử dụng để thực thi mã khởi tạo gói, chẳng hạn như khởi tạo dữ liệu cấp góiVí dụ: xem xét tệp
>>> import mod
>>> mod
266 sau__trong đó__. py
>>> import mod
>>> mod
44Hãy thêm tệp này vào thư mục
>>> import mod
>>> mod
258 từ ví dụ trênBây giờ khi gói được nhập, danh sách toàn cầu
>>> import mod
>>> mod
269 được khởi tạo>>>
>>> import mod
>>> mod
45Một mô-đun trong gói có thể truy cập biến toàn cục bằng cách nhập lần lượt
mod1. py
>>> import mod
>>> mod
46>>>
>>> import mod
>>> mod
47>>> import mod
>>> mod
266 cũng có thể được sử dụng để tự động nhập các mô-đun từ một gói. Ví dụ, trước đó bạn đã thấy rằng câu lệnh >>> import mod
>>> mod
271 chỉ đặt tên >>> import mod
>>> mod
258 trong bảng ký hiệu cục bộ của người gọi và không nhập bất kỳ mô-đun nào. Nhưng nếu >>> import mod
>>> mod
266 trong thư mục >>> import mod
>>> mod
258 chứa thông tin sau__trong đó__. py
>>> import mod
>>> mod
48sau đó khi bạn thực thi
>>> import mod
>>> mod
271, các mô-đun >>> import mod
>>> mod
276 và >>> import mod
>>> mod
277 sẽ được nhập tự động>>>
>>> import mod
>>> mod
49Ghi chú. Phần lớn tài liệu Python nói rằng tệp
>>> import mod
>>> mod
266 phải có trong thư mục gói khi tạo gói. Điều này đã từng đúng. Trước đây, chính sự hiện diện của >>> import mod
>>> mod
266 đã báo hiệu cho Python rằng một gói đang được xác định. Tệp có thể chứa mã khởi tạo hoặc thậm chí trống, nhưng nó phải có mặtBắt đầu với Python 3. 3, Các gói không gian tên ẩn đã được giới thiệu. Những điều này cho phép tạo một gói mà không cần bất kỳ tệp
>>> import mod
>>> mod
266 nào. Tất nhiên, nó vẫn có thể xuất hiện nếu cần khởi tạo gói. Nhưng nó không còn cần thiếtNhập >>> import mod
>>> mod
281 từ một gói hàng
>>> import mod
>>> mod
Vì mục đích của cuộc thảo luận sau đây, gói được xác định trước đó được mở rộng để chứa một số mô-đun bổ sung
Hiện tại có bốn mô-đun được xác định trong thư mục
>>> import mod
>>> mod
258. Nội dung của chúng như hình bên dướimod1. py
>>> import mod
>>> mod
22mod2. py
>>> import mod
>>> mod
23mod3. py
>>> s
NameError: name 's' is not defined
>>> foo['quux']
NameError: name 'foo' is not defined
12mod4. py
>>> s
NameError: name 's' is not defined
>>> foo['quux']
NameError: name 'foo' is not defined
13[Trí tưởng tượng, phải không?]
Bạn đã thấy rằng khi
>>> import mod
>>> mod
233 được sử dụng cho một mô-đun, tất cả các đối tượng từ mô-đun được nhập vào bảng ký hiệu cục bộ, ngoại trừ những đối tượng có tên bắt đầu bằng dấu gạch dưới, như thường lệ>>>
>>> s
NameError: name 's' is not defined
>>> foo['quux']
NameError: name 'foo' is not defined
14Câu lệnh tương tự cho một gói là thế này
>>> s
NameError: name 's' is not defined
>>> foo['quux']
NameError: name 'foo' is not defined
15Cái đó làm cái gì?
>>>
>>> s
NameError: name 's' is not defined
>>> foo['quux']
NameError: name 'foo' is not defined
16Hừm. Không nhiều. Bạn có thể đã mong đợi [giả sử bạn có bất kỳ kỳ vọng nào] rằng Python sẽ đi sâu vào thư mục gói, tìm tất cả các mô-đun có thể và nhập tất cả chúng. Nhưng như bạn có thể thấy, theo mặc định, đó không phải là điều xảy ra
Thay vào đó, Python tuân theo quy ước này. nếu tệp
>>> import mod
>>> mod
266 trong thư mục gói chứa danh sách có tên >>> import mod
>>> mod
285, thì nó được coi là danh sách các mô-đun sẽ được nhập khi gặp câu lệnh >>> import mod
>>> mod
286Đối với ví dụ hiện tại, giả sử bạn tạo một
>>> import mod
>>> mod
266 trong thư mục >>> import mod
>>> mod
258 như thế nàypkg/__init__. py
>>> s
NameError: name 's' is not defined
>>> foo['quux']
NameError: name 'foo' is not defined
17Bây giờ
>>> import mod
>>> mod
289 nhập cả bốn mô-đun>>>
>>> s
NameError: name 's' is not defined
>>> foo['quux']
NameError: name 'foo' is not defined
18Sử dụng
>>> import mod
>>> mod
233 vẫn không được coi là hình thức tuyệt vời, nhiều hơn cho các gói hơn là cho các mô-đun. Nhưng cơ sở này ít nhất cung cấp cho người tạo gói một số quyền kiểm soát đối với những gì xảy ra khi _____1233 được chỉ định. [Trên thực tế, nó cung cấp khả năng không cho phép hoàn toàn, đơn giản bằng cách từ chối xác định >>> import mod
>>> mod
285. Như bạn đã thấy, hành vi mặc định cho các gói là không nhập gì cả. ]Nhân tiện,
>>> import mod
>>> mod
285 cũng có thể được định nghĩa trong một mô-đun và phục vụ cùng một mục đích. để kiểm soát những gì được nhập khẩu với >>> import mod
>>> mod
233. Ví dụ: sửa đổi >>> import mod
>>> mod
259 như saupkg/mod1. py
>>> s
NameError: name 's' is not defined
>>> foo['quux']
NameError: name 'foo' is not defined
19Bây giờ, một câu lệnh
>>> import mod
>>> mod
233 từ >>> import mod
>>> mod
263 sẽ chỉ nhập những gì có trong >>> import mod
>>> mod
285>>>
>>> import mod
>>> mod
0>>> s
NameError: name 's' is not defined
>>> foo['quux']
NameError: name 'foo' is not defined
4 [hàm] hiện được định nghĩa trong không gian tên cục bộ, nhưng >>> s
NameError: name 's' is not defined
>>> foo['quux']
NameError: name 'foo' is not defined
5 [lớp] thì không, vì lớp sau không có trong >>> import mod
>>> mod
285Tóm lại,
>>> import mod
>>> mod
285 được cả gói và mô-đun sử dụng để kiểm soát nội dung được nhập khi chỉ định >>> import mod
>>> mod
233. Nhưng hành vi mặc định khác- Đối với một gói, khi
285 không được xác định, thì>>> import mod >>> mod
233 không nhập bất kỳ thứ gì>>> import mod >>> mod
- Đối với một mô-đun, khi
285 không được xác định, thì>>> import mod >>> mod
233 sẽ nhập mọi thứ [ngoại trừ—bạn đã đoán ra—các tên bắt đầu bằng dấu gạch dưới]>>> import mod >>> mod
gói con
Các gói có thể chứa các gói con lồng nhau đến độ sâu tùy ý. Ví dụ: hãy thực hiện thêm một sửa đổi đối với thư mục gói ví dụ như sau
Bốn mô-đun [
>>> import mod
>>> mod
259, >>> import mod
>>> mod
260, >>> import mod
>>> mod
310 và >>> import mod
>>> mod
311] được định nghĩa như trước đây. Nhưng bây giờ, thay vì được gộp chung vào thư mục >>> import mod
>>> mod
258, chúng được chia thành hai thư mục gói con, >>> import mod
>>> mod
313 và >>> import mod
>>> mod
314Quá trình nhập vẫn hoạt động giống như được hiển thị trước đó. Cú pháp tương tự, nhưng ký hiệu dấu chấm bổ sung được sử dụng để tách tên gói khỏi tên gói phụ
>>>
>>> import mod
>>> mod
1Ngoài ra, một mô-đun trong một gói con có thể tham chiếu các đối tượng trong gói con anh chị em [trong trường hợp anh chị em chứa một số chức năng mà bạn cần]. Ví dụ: giả sử bạn muốn nhập và thực thi hàm
>>> s
NameError: name 's' is not defined
>>> foo['quux']
NameError: name 'foo' is not defined
4 [được xác định trong mô-đun >>> import mod
>>> mod
276] từ bên trong mô-đun >>> import mod
>>> mod
317. Bạn có thể sử dụng nhập khẩu tuyệt đốipkg/sub__pkg2/mod3. py
>>> import mod
>>> mod
2>>>
>>> import mod
>>> mod
3Hoặc bạn có thể sử dụng nhập tương đối, trong đó
>>> import mod
>>> mod
318 đề cập đến gói tăng một cấp. Từ bên trong >>> import mod
>>> mod
310, nằm trong gói con >>> import mod
>>> mod
314,
318 đánh giá gói mẹ [>>> import mod >>> mod
258] và>>> import mod >>> mod
323 đánh giá thành gói con>>> import mod >>> mod
313 của gói mẹ>>> import mod >>> mod
pkg/sub__pkg2/mod3. py
>>> import mod
>>> mod
4>>>
>>> import mod
>>> mod
5Sự kết luận
Trong hướng dẫn này, bạn đã đề cập đến các chủ đề sau
- Cách tạo mô-đun Python
- Các vị trí mà trình thông dịch Python tìm kiếm một mô-đun
- Cách lấy quyền truy cập vào các đối tượng được xác định trong một mô-đun bằng câu lệnh
8>>> import mod >>> mod
- Cách tạo mô-đun có thể thực thi dưới dạng tập lệnh độc lập
- Cách tổ chức các mô-đun thành các gói và gói con
- Cách kiểm soát việc khởi tạo gói
Tải xuống PDF miễn phí. Bảng cheat Python 3
Điều này hy vọng sẽ cho phép bạn hiểu rõ hơn về cách truy cập vào chức năng có sẵn trong nhiều mô-đun tích hợp và bên thứ ba có sẵn trong Python
Ngoài ra, nếu bạn đang phát triển ứng dụng của riêng mình, việc tạo các mô-đun và gói của riêng bạn sẽ giúp bạn tổ chức và mô-đun hóa mã của mình, giúp mã hóa, bảo trì và gỡ lỗi dễ dàng hơn
Nếu bạn muốn tìm hiểu thêm, hãy xem tài liệu sau tại Python. tổ chức
- Hệ thống
8>>> import mod >>> mod
- hướng dẫn Python. mô-đun
Python hạnh phúc
Đánh dấu là đã hoàn thành
Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Các mô-đun và gói Python. Giới thiệu
🐍 Thủ thuật Python 💌
Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python
Gửi cho tôi thủ thuật Python »
Giới thiệu về John Sturtz
John là một Pythonista cuồng nhiệt và là thành viên của nhóm hướng dẫn Real Python
» Thông tin thêm về JohnMỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là
Đan
Joanna
Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực
Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia
Nâng cao kỹ năng Python của bạn »
Bậc thầy Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực
Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia
Nâng cao kỹ năng Python của bạn »
Bạn nghĩ sao?
Đánh giá bài viết này
Tweet Chia sẻ Chia sẻ EmailBài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?
Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. Nhận các mẹo để đặt câu hỏi hay và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi