Các mô -đun có thể nhập vào theo chu kỳ, nhưng có một sự bắt bóng. Trong trường hợp đơn giản, nó sẽ hoạt động bằng cách di chuyển các câu lệnh import webbrowser 2 sang dưới cùng của tệp hoặc không sử dụng cú pháp import webbrowser 3.
Đây là lý do tại sao nó hoạt động:
Khi bạn nhập một mô -đun, Python lần đầu tiên kiểm tra import webbrowser 4. Nếu nó ở đó, nó chỉ nhập từ đó. Nếu nó không có ở đó, nó cố gắng nhập nó theo cách bình thường; Về cơ bản, nó tìm thấy tệp và chạy các thứ trong đó.
Chạy một mô -đun điền vào nội dung của mô -đun. Ví dụ: giả sử chúng ta có mô -đun này, được đặt tên một cách sáng tạo import webbrowser 5:
import webbrowser def open_example(): webbrowser.open('//www.example.com/')Khi bắt đầu, mô -đun trống. Sau đó, Python thực thi:
import webbrowserSau đó, mô -đun chỉ chứa import webbrowser 6. Sau đó, Python thực hiện điều này:
def open_example(): webbrowser.open('//www.example.com/')Python tạo ra import webbrowser 7. Bây giờ mô -đun chứa import webbrowser 6 và import webbrowser 7.
Nói import webbrowser 6 chứa mã này:
from example_opener import open_example def open(url): print urlNói import webbrowser 5 được nhập khẩu đầu tiên. Mã này được thực thi:
import webbrowserimport webbrowser 6 chưa được nhập khẩu, vì vậy Python thực hiện nội dung của import webbrowser 6:
from example_opener import open_exampleimport webbrowser 5 đã được nhập khẩu, nhưng chưa được thực hiện đầy đủ. Python không quan tâm. Python kéo mô -đun ra khỏi import webbrowser 4. Tại thời điểm này, import webbrowser 5 vẫn trống. Nó chưa xác định import webbrowser 7, thậm chí cũng không hoàn thành nhập import webbrowser 6. Python không thể tìm thấy import webbrowser 7 trong import webbrowser 5, vì vậy nó thất bại.
Điều gì sẽ xảy ra nếu chúng tôi nhập import webbrowser 7 từ cuối import webbrowser 6 và import webbrowser 6 từ cuối import webbrowser 5? Python sẽ bắt đầu bằng cách thực thi mã này:
def open_example(): webbrowser.open('//www.example.com/')import webbrowser 6 chưa tồn tại, nhưng nó không quan trọng cho đến khi import webbrowser 7 được gọi. Bây giờ import webbrowser 5 chỉ chứa import webbrowser 7. Sau đó nó thực hiện:
import webbrowserNó chưa được nhập khẩu, vì vậy Python thực thi import webbrowser 6. Nó bắt đầu:
def open(url): print urlNó xác định import webbrowser 0. Sau đó, nó thực hiện:
from example_opener import open_exampleimport webbrowser 5 là trong import webbrowser 4, vì vậy nó sử dụng điều đó. import webbrowser 5 chứa import webbrowser 7, vì vậy nó thành công. Python kết thúc nhập khẩu import webbrowser 6. Điều đó kết thúc nhập khẩu import webbrowser 6 từ import webbrowser 5. Đó là điều cuối cùng trong import webbrowser 5, vì vậy việc nhập import webbrowser 5 hoàn thành, cũng thành công.
Trong Python, một mô -đun là một đơn vị mã Python có thể được nhập (tải và sử dụng) bằng mã Python khác. Một mô -đun có thể chứa các định nghĩa (như các hàm và hằng số), cũng như các câu lệnh khởi tạo các định nghĩa đó. Khi mã mô -đun được viết, nó có thể được sử dụng lại bởi bất kỳ tập lệnh nào nhập mô -đun.module is a single unit of Python code that can be imported (loaded and used) by other Python code. A module can contain definitions (like functions and constants), as well as statements that initialize those definitions. Once the module code is written, it can be reused by any script that imports the module.
Một cách phổ biến để tạo mô -đun Python là tạo một tệp với tên tệp kết thúc bằng from example_opener import open_example 0 và viết mã mô -đun vào đó. Nếu chúng ta sử dụng một phần mở rộng tệp khác trong tên tệp hoặc không có tiện ích mở rộng nào, các câu lệnh import webbrowser 2 tiêu chuẩn được hiển thị bên dưới sẽ không hoạt động và chúng ta sẽ phải sử dụng from example_opener import open_example 2 thay thế, đòi hỏi nhiều mã hơn (thêm thông tin bên dưới).
Để minh họa việc sử dụng tiêu chuẩn import webbrowser 2, giả sử chúng tôi tạo một tệp có tên from example_opener import open_example 4 với định nghĩa chức năng sau:
Bây giờ mỗi khi chúng ta muốn viết "Xin chào, thế giới!" Đối với màn hình từ tập lệnh Python, chúng ta chỉ có thể nhập mô -đun này thay vì phải viết lại tin nhắn. Nó cũng cho phép chúng tôi thay đổi một dòng mã bên trong from example_opener import open_example 4 thay vì trong nhiều tập lệnh khác nhau nếu chúng tôi quyết định thay đổi thông điệp mà chúng tôi muốn hiển thị trong tất cả các tập lệnh sử dụng chức năng này.
from example_opener import open_example 4 chứa hàm from example_opener import open_example 7 mà chúng tôi đã thấy ở trên.
Tên được sử dụng trong câu lệnh import webbrowser 2 chỉ đơn giản là tên tệp của mô -đun mà không có tiện ích mở rộng from example_opener import open_example 0 ở cuối.
Phiên bản Python 3.3 và cao hơn cho phép nhập các mô -đun dễ dàng trong các thư mục con của thư mục của tập lệnh hiện tại. Nếu bạn đang sử dụng phiên bản Python thấp hơn 3.3, bạn có thể làm theo các bước trong nhập tệp trong một thư mục khác.
Trong một đường dẫn hệ thống tệp, chúng tôi sẽ tách các thành phần của đường dẫn bằng def open_example(): webbrowser.open('//www.example.com/') 0 (Linux, MacOS, v.v.) hoặc def open_example(): webbrowser.open('//www.example.com/') 1 (Windows). Tuy nhiên, trong câu lệnh Python import webbrowser 2, chúng tôi tách các thành phần đường dẫn bằng DOT (def open_example(): webbrowser.open('//www.example.com/') 3).
trong đó def open_example(): webbrowser.open('//www.example.com/') 4 là bất kỳ tên nào chúng tôi chọn. Chúng tôi cũng có thể nhập chức năng trực tiếp:
Điều này hoạt động ngay cả khi có nhiều cấp độ của thư mục con. Ví dụ: nếu chúng ta có cấu trúc thư mục sau:
Bây giờ chúng ta hãy nói rằng chúng ta chuyển from example_opener import open_example 4 sang một thư mục bên ngoài cây thư mục hiện tại:
Theo mặc định, Python tìm các tệp trong cùng một thư mục (bao gồm cả thư mục con) là tệp tập lệnh hiện tại, cũng như ở các vị trí tiêu chuẩn khác được xác định trong def open_example(): webbrowser.open('//www.example.com/') 6. Nếu bạn tò mò những vị trí này là gì, bạn có thể in biến def open_example(): webbrowser.open('//www.example.com/') 6 như thế này:
Tuy nhiên, nếu tệp chúng tôi muốn nhập hoàn toàn ở một nơi khác, trước tiên chúng tôi sẽ phải nói với Python nơi để tìm bằng cách thêm các thư mục tìm kiếm vào def open_example(): webbrowser.open('//www.example.com/') 6. Trong ví dụ của chúng tôi, chúng tôi có thể viết trong def open_example(): webbrowser.open('//www.example.com/') 9:
Lưu ý rằng đường dẫn được nối với def open_example(): webbrowser.open('//www.example.com/') 6 là một đường dẫn tuyệt đối. Nếu chúng tôi sử dụng đường dẫn tương đối, đường dẫn sẽ giải quyết khác nhau dựa trên thư mục mà người dùng đang chạy tập lệnh, không liên quan đến đường dẫn của ____ ____ 69.
Để nối một thư mục liên quan đến tệp tập lệnh này, bạn có thể sử dụng import webbrowser 2 để lấy đường dẫn đầy đủ của tập lệnh hiện tại và xây dựng một đường dẫn đầy đủ đến nhập từ đó. Trong def open_example(): webbrowser.open('//www.example.com/') 9 chúng ta có thể viết:
Phiên bản Python 3.4 trở lên cung cấp chức năng thông qua thư viện from example_opener import open_example 2 tích hợp cho phép chúng tôi tải bất kỳ tệp nào ở bất cứ đâu dưới dạng mô-đun Python, ngay cả khi tên tệp của tệp không kết thúc trong from example_opener import open_example 0 (nó có thể có phần mở rộng tệp khác hoặc không có phần mở rộng tệp ở tất cả).
Lưu ý ở đây rằng tên tệp import webbrowser 6 không có phần mở rộng tệp. Trong trường hợp này, chúng tôi không thể sử dụng câu lệnh import webbrowser 2 đơn giản để nhập tệp đó. Thay vào đó, chúng ta có thể viết trong def open_example(): webbrowser.open('//www.example.com/') 9:
Lưu ý rằng đường dẫn được truyền vào import webbrowser 9 là một đường dẫn tuyệt đối. Nếu chúng tôi sử dụng một đường dẫn tương đối như def open(url): print url 0, đường dẫn sẽ giải quyết khác nhau dựa trên thư mục mà người dùng đang chạy tập lệnh, không liên quan đến đường dẫn của ____ 69.
Nếu chúng tôi muốn tham chiếu một tệp liên quan đến đường dẫn của tệp tập lệnh hiện tại của chúng tôi, chúng tôi có thể sử dụng import webbrowser 2 để trước để lấy đường dẫn của tệp tập lệnh hiện tại của chúng tôi và sau đó xây dựng một đường dẫn đầy đủ từ đó:
import webbrowser 0 | import webbrowser 1 |