Tải một mô-đun trong python

Chuyển đến nội dung chính

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úc

Bà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

  1. Một mô-đun có thể được viết bằng chính Python
  2. 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
    >>> import mod
    >>> mod
    
    
    6 (biểu thức chính quy)
  3. 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
    >>> import mod
    >>> mod
    
    
    7

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ết

Ví 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 sau

chế độ. 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

  • >>> s
    NameError: name 's' is not defined
    >>> foo('quux')
    NameError: name 'foo' is not defined
    
    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)

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

2

Loạ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

3

Khi 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
    >>> s
    NameError: name 's' is not defined
    >>> foo('quux')
    NameError: name 'foo' is not defined
    
    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
    >>> import mod
    >>> mod
    
    
    81. )
  • 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

1

Ghi 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ạn

Vì 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
    >>> s
    NameError: name 's' is not defined
    >>> foo('quux')
    NameError: name 'foo' is not defined
    
    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ửa đổi biến môi trường
    >>> s
    NameError: name 's' is not defined
    >>> foo('quux')
    NameError: name 'foo' is not defined
    
    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
    • Hoặc. Đặt
      >>> s
      NameError: name 's' is not defined
      >>> foo('quux')
      NameError: name 'foo' is not defined
      
      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
  • Đặt
    >>> s
    NameError: name 's' is not defined
    >>> foo('quux')
    NameError: name 'foo' is not defined
    
    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

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

2

Khi 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

4

Phầ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

82

Tuyên bố >>> import mod >>> mod 8

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

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
1

Lư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ô-đun

Từ 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ưới

Sau 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

8

Mộ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

20

Loại bỏ các quảng cáo

>>> import mod >>> mod 221

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

21

Sau 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

22

Vì 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

23

Thậ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

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

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

29

Nộ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

30

Tuy 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

31

Cuố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

33

Loại bỏ các quảng cáo

Hàm >>> import mod >>> mod 237

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

34

Lư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

35

Khi đư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

37

Thự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ên

chế độ. 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

39

Khô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

10

Bây giờ nó sẽ thú vị hơn một chút

>>> import mod
>>> mod

11

Thậ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ợp

chế độ. py

>>> import mod
>>> mod

13

Bâ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

14

Nhưng nếu bạn nhập dưới dạng mô-đun, bạn không

>>>

>>> import mod
>>> mod

15

Cá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ư sau

thực tế. py

>>> import mod
>>> mod

16

Tệp có thể được coi là một mô-đun và hàm

>>> import mod
>>> mod

252 đã được nhập

>>>

>>> import mod
>>> mod

17

Như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

18

Loại bỏ các quảng cáo

Tả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
0

chế độ. py

>>> import mod
>>> mod

19

>>>

>>> import mod
>>> mod

20

Câ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

21

Gó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

Tải một mô-đun trong python

Ở đâ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

22

mod2. py

>>> import mod
>>> mod

23

Vớ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

29

Bạ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

41

Về mặt kỹ thuật, bạn cũng có thể nhập gói

>>>

>>> import mod
>>> mod

42

Như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áo

Khở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ói

Ví dụ: xem xét tệp

>>> import mod
>>> mod

266 sau

__trong đó__. py

>>> import mod
>>> mod

44

Hãy thêm tệp này vào thư mục

>>> import mod
>>> mod

258 từ ví dụ trên

Tải một mô-đun trong python

Bâ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

45

Mộ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

48

sau đó 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

49

Ghi 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ặt

Bắ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ết

Nhập >>> import mod >>> mod 281 từ một gói hàng

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

Tải một mô-đun trong python

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ưới

mod1. py

>>> import mod
>>> mod

22

mod2. py

>>> import mod
>>> mod

23

mod3. py

>>> s
NameError: name 's' is not defined
>>> foo('quux')
NameError: name 'foo' is not defined
12

mod4. 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
14

Câ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
15

Cái đó làm cái gì?

>>>

>>> s
NameError: name 's' is not defined
>>> foo('quux')
NameError: name 'foo' is not defined
16

Hừ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ày

pkg/__init__. py

>>> s
NameError: name 's' is not defined
>>> foo('quux')
NameError: name 'foo' is not defined
17

Bâ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
18

Sử 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ư sau

pkg/mod1. py

>>> s
NameError: name 's' is not defined
>>> foo('quux')
NameError: name 'foo' is not defined
19

Bâ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

285

Tó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
    >>> import mod
    >>> mod
    
    
    285 không được xác định, thì
    >>> import mod
    >>> mod
    
    
    233 không nhập bất kỳ thứ gì
  • Đối với một mô-đun, khi
    >>> import mod
    >>> mod
    
    
    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)

Loại bỏ các quảng cáo

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

Tải một mô-đun trong python

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

314

Quá 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

1

Ngoà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 đối

pkg/sub__pkg2/mod3. py

>>> import mod
>>> mod

2

>>>

>>> import mod
>>> mod

3

Hoặ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,

  • >>> import mod
    >>> mod
    
    
    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ẹ

pkg/sub__pkg2/mod3. py

>>> import mod
>>> mod

4

>>>

>>> import mod
>>> mod

5

Sự 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
    >>> import mod
    >>> mod
    
    
    8
  • 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
    >>> import mod
    >>> mod
    
    
    8
  • 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

Tải một mô-đun trong python

Gửi cho tôi thủ thuật Python »

Giới thiệu về John Sturtz

Tải một mô-đun trong python
Tải một mô-đun trong python

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ề John


Mỗ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à

Tải một mô-đun trong python

Đan

Tải một mô-đun trong python

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

Tải một mô-đun trong python

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ẻ Email

Bà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

Lệnh nào được sử dụng để tải mô-đun Python?

Khi chúng tôi cần bao gồm hoặc sử dụng các chức năng này của mô-đun trong mã của mình, chúng tôi chỉ cần nhập mô-đun bằng cách sử dụng lệnh nhập và . Lệnh nhập là cách phổ biến và đơn giản nhất để đưa các mô-đun vào mã của bạn.

Bạn có thể nhập mô-đun bằng Python theo cách thủ công không?

Một tệp được coi là một mô-đun trong python. Để sử dụng mô-đun, bạn phải nhập mô-đun bằng từ khóa nhập . Hàm hoặc biến có trong tệp có thể được sử dụng trong tệp khác bằng cách nhập mô-đun. Chức năng này có sẵn trong các ngôn ngữ khác, như TypeScript, JavaScript, java, ruby, v.v.