Hướng dẫn import file vào python
Mục lục bài viết:
Show
Các bạn có thể download code ví dụ tại ĐÂY để tiện trong quá trình tìm hiểu bài viết này. Trong Python, bạn sử dụng Hướng dẫn này sẽ cung cấp một cái nhìn tổng quan toàn diện về Trong hướng dẫn này, bạn sẽ học cách:
Python cơ bản importMã Python được tổ chức thành cả mô-đun và gói . Phần này sẽ giải thích chúng khác nhau như thế nào và bạn có thể làm việc với chúng như thế nào. Ở phần sau của hướng dẫn, bạn sẽ thấy một số cách sử dụng nâng cao và ít được biết đến của hệ thống nhập của Python. Tuy nhiên, hãy bắt đầu với những điều cơ bản: nhập mô-đun và gói. Mô-đunCác Python.org thuật ngữ định nghĩa mô-đun như sau:
Trong thực tế, một mô-đun thường tương ứng với một Sức mạnh thực sự của các mô-đun là chúng có thể được nhập và sử dụng lại trong mã khác. Hãy xem xét ví dụ sau: >>>
Trong dòng đầu tiên Lưu ý rằng bạn viết
Bạn có thể liệt kê nội dung của một không gian tên với >>>
Sử dụng Bạn đã thấy cách sử dụng đơn giản nhất của Đoạn mã sau chỉ nhập >>>
Lưu ý rằng điều này Bạn cũng có thể đổi tên các mô-đun và thuộc tính khi chúng được nhập: >>>
Để biết thêm chi tiết về cú pháp nhập mô-đun, hãy xem Mô-đun và gói Python - Giới thiệu . Các góiBạn có thể sử dụng một gói để tổ chức thêm các mô-đun của mình. Bảng chú giải thuật ngữ Python.org định nghĩa gói như sau:
Lưu ý rằng một gói vẫn là một mô-đun. Là một người dùng, bạn thường không cần phải lo lắng về việc bạn đang nhập một mô-đun hay một gói. Trong thực tế, một gói thường tương ứng với một thư mục tệp chứa tệp Python và các thư mục khác. Để tự tạo một gói Python, bạn tạo một thư mục và một tệp có tên Lưu ý: Các thư mục không có Nói chung, các mô-đun con và gói con không được nhập khi bạn nhập một gói. Tuy nhiên, bạn có thể sử dụng
Mỗi tệp quốc gia sẽ in ra một lời chào, trong khi các
Lưu ý rằng Hãy chơi với >>>
Khi >>>
Các >>>
Hãy nhớ rằng, nhập một mô-đun vừa tải nội dung vừa tạo không gian tên chứa nội dung. Một vài ví dụ cuối cùng cho thấy rằng có thể cùng một mô-đun là một phần của các không gian tên khác nhau. Chi tiết kỹ thuật: Không gian tên mô-đun được triển khai dưới dạng từ điển
Python và có sẵn tại >>>
Bạn hiếm khi cần phải tương tác Tương tự, không gian tên toàn cục của Python cũng là một từ điển. Bạn có thể truy cập nó thông qua Việc nhập các gói con và mô-đun con trong
một Nhập khẩu tuyệt đối và tương đốiNhớ lại mã nguồn của Bạn đã từng
thấy những Dấu chấm đề cập đến gói hiện tại và câu lệnh là một ví dụ về nhập tương đối . Bạn có thể đọc nó là “Từ gói hiện tại, hãy nhập gói con Có một câu lệnh nhập tuyệt đối tương đương trong đó bạn đặt tên rõ ràng cho gói hiện tại: Trên thực tế, tất cả các hoạt động nhập khẩu vào Nhập tương đối phải ở dạng Các phong cách dẫn PEP 8 khuyến cáo sử dụng nhập khẩu tuyệt đối nói chung. Tuy nhiên, nhập khẩu tương đối là một giải pháp thay thế để tổ chức phân cấp gói. Để biết thêm thông tin, hãy xem Nhập tuyệt đối so với Nhập tương đối bằng Python . Đường dẫn nhập của PythonLàm cách nào để Python tìm thấy các mô-đun và các gói mà nó nhập vào? Bạn sẽ thấy thêm chi tiết về cơ chế của hệ thống nhập Python sau . Hiện tại, chỉ cần biết rằng Python tìm kiếm các mô-đun và gói trong đường dẫn nhập của nó . Đây là danh sách các vị trí được tìm kiếm các mô-đun để nhập. Lưu ý: Khi bạn nhập Đặc biệt, nó sẽ tìm kiếm trong bộ nhớ cache của mô-đun để xem liệu Bạn sẽ tìm hiểu thêm về máy móc nhập Python đầy đủ trong phần sau . Bạn có thể kiểm tra đường dẫn nhập của Python bằng cách in
Thông thường, Python sẽ bắt đầu ở đầu danh sách các vị trí và tìm kiếm một mô-đun nhất định trong mỗi vị trí cho đến khi khớp đầu tiên. Vì thư mục tập lệnh hoặc thư mục hiện tại luôn nằm đầu tiên trong danh sách này, bạn có thể đảm bảo rằng các tập lệnh của mình tìm thấy các mô-đun và gói tự tạo của bạn bằng cách tổ chức các thư mục của bạn và cẩn thận về việc bạn chạy Python từ thư mục nào. Tuy nhiên, bạn cũng nên cẩn thận rằng bạn không tạo các mô-đun làm bóng hoặc ẩn các mô-đun quan trọng khác. Ví dụ, giả sử rằng bạn xác định
Sử dụng mô-đun này hoạt động như mong đợi: >>>
Nhưng mô-đun này cũng che
bóng >>>
Vấn đề là Python hiện tìm kiếm Để tránh những loại vấn đề này, bạn nên cẩn thận với tên của các mô-đun và gói của mình. Đặc biệt, tên gói và mô-đun cấp cao
nhất của bạn phải là duy nhất. Nếu Ví dụ: Cấu trúc nhập khẩu của bạnMặc dù bạn có thể sắp xếp việc nhập bằng cách sử dụng thư mục hiện tại cũng như bằng cách thao tác
Ứng dụng sẽ tạo lại cấu trúc
tệp nhất định bằng cách tạo thư mục và tệp trống. Các
Hai tệp mã nguồn cũng như Bây giờ hãy xem mã nguồn. Chức năng chính của ứng dụng được xác định trong
Trong các dòng từ 12 đến 16 , bạn đọc một đường dẫn gốc từ dòng lệnh. Trong ví dụ trên, bạn sử dụng dấu chấm, có nghĩa là thư mục hiện tại. Đường dẫn này sẽ được sử dụng làm Công việc thực tế xảy ra từ dòng 19 đến dòng
23 . Đầu tiên, bạn tạo một đường dẫn duy nhất Đối với thao tác với các đường dẫn như thế này, Ở dòng 26 , bạn gọi Lưu ý rằng bạn nhập
Hãy xem xét việc nhập
Nó trông khá ngây thơ. Tuy nhiên, khi dự án phát triển, dòng này sẽ khiến bạn đau đầu. Ngay cả khi bạn nhập May mắn thay, thư mục chứa tập lệnh hiện tại luôn nằm trong đường dẫn nhập của Python, vì vậy điều này hiện hoạt động tốt. Tuy nhiên, nếu dự án của bạn đạt được một số lực kéo, thì nó có thể được sử dụng theo những cách khác. Ví dụ: một người nào đó có thể muốn nhập tập lệnh vào một Máy tính xách tay Jupyter và chạy nó từ đó. Hoặc họ có thể muốn sử dụng lại Để xem ví dụ, bạn có thể làm theo hướng dẫn PyInstaller và tạo một điểm vào ứng dụng của mình . Thêm một thư mục bổ sung bên ngoài thư mục ứng dụng của bạn:
Trong thư mục bên ngoài, tạo ra các kịch bản điểm nhập cảnh,
Tập lệnh này sẽ nhập Về lý thuyết, điều này sẽ hoạt động tương tự như chạy ứng dụng trực tiếp:
Tại sao điều đó không hoạt động? Đột nhiên, quá trình nhập Vấn đề là bằng cách khởi động ứng dụng bằng Một giải pháp khả thi là thay đổi đường dẫn nhập của Python:
Điều này hoạt động vì đường dẫn nhập bao gồm thư mục chứa Trong thực tế, bạn đang tạo lại một tính năng của các phiên bản Python đầu tiên được gọi là nhập tương đối ngầm định . Những điều này đã bị loại bỏ khỏi ngôn ngữ bởi PEP 328 với lý do sau:
Một giải pháp khác là sử dụng nhập tương đối để thay thế. Thay đổi nhập
Bây giờ bạn có thể khởi động ứng dụng của mình thông qua tập lệnh điểm nhập:
Rất tiếc, bạn không thể gọi ứng dụng trực tiếp được nữa:
Vấn đề là việc nhập tương đối được giải quyết trong các tập lệnh khác với các mô-đun được nhập. Tất nhiên, bạn có thể quay lại và khôi phục quá trình nhập tuyệt đối trước khi chạy trực tiếp tập lệnh hoặc thậm chí bạn có thể thực hiện một số động
tác Thậm chí còn có một vụ hack được chính thức xử phạt để làm cho việc nhập tương đối hoạt động trong các tập lệnh. Thật không may, điều này cũng buộc bạn phải thay đổi
Thật vậy, một giải pháp tốt hơn — và ổn định hơn — là chơi cùng với hệ thống nhập và đóng gói của Python và cài đặt dự án của bạn dưới dạng gói cục bộ bằng cách sử dụng Tạo và cài đặt gói cục bộKhi bạn cài đặt một gói từ PyPI , gói đó có sẵn cho tất cả các tập lệnh trong môi trường của bạn. Tuy nhiên, bạn cũng có thể cài đặt các gói từ máy tính cục bộ của mình và chúng cũng sẽ được cung cấp theo cách tương tự. Tạo một gói cục bộ không liên quan nhiều đến chi phí. Đầu tiên, tạo tối thiểu
Về lý thuyết, cái Một mẹo là cung cấp cho tất cả các gói cục bộ như vậy một tiền tố chung như
Lệnh này sẽ cài đặt gói vào hệ thống của bạn. Lưu ý: Loại tệp thiết lập này hoạt động tốt khi bạn đang làm việc với các dự án của riêng mình. Tuy nhiên, nếu bạn định chia sẻ mã với người khác, thì bạn nên thêm một số thông tin vào tệp thiết lập của mình. Để biết thêm chi tiết về các tệp thiết lập, hãy xem Cách xuất bản Gói Python nguồn mở lên PyPI . Bây giờ nó đã
Điều này sẽ hoạt động bất kể bạn kết thúc cuộc gọi ứng dụng của mình như thế nào. Mẹo: Trong mã của riêng bạn, bạn nên tách các tập lệnh và thư viện một cách có ý thức. Đây là một nguyên tắc nhỏ:
Bạn có thể có mã mà bạn muốn vừa chạy riêng vừa nhập từ các tập lệnh khác. Trong trường hợp đó, thường nên cấu trúc lại mã của bạn để bạn chia phần chung thành một mô-đun thư viện. Mặc dù tách các tập lệnh và thư viện là một ý tưởng hay, nhưng tất cả các tệp Python đều có thể được thực thi và nhập. Trong phần sau , bạn sẽ tìm hiểu thêm về cách tạo các mô-đun xử lý tốt cả hai. Gói không gian tênCác mô-đun và gói Python có liên quan rất chặt chẽ đến các tệp và thư mục. Điều này làm cho Python khác biệt với nhiều ngôn ngữ lập trình khác, trong đó các gói chỉ hoạt động như không gian tên mà không thực thi cách tổ chức mã nguồn. Xem thảo luận trong PEP 402 để biết các ví dụ. Các gói không gian tên đã có sẵn bằng Python kể từ phiên bản 3.3. Chúng ít phụ thuộc hơn vào hệ thống phân cấp tệp cơ bản. Đặc biệt, các gói không gian tên có thể được chia thành nhiều thư mục. Gói không gian tên được tạo tự động nếu bạn
có thư mục chứa Lưu ý: Nói một cách chính xác, các gói không gian tên ngầm định đã được giới thiệu trong Python 3.3. Trong các phiên bản Python trước, bạn có thể tạo các gói vùng tên theo cách thủ công theo một số cách không tương thích khác nhau . PEP 420 thống nhất và đơn giản hóa các phương pháp tiếp cận trước đó. Để hiểu rõ hơn về lý do tại sao các gói không gian tên có thể hữu ích, chúng ta hãy thử triển khai một gói. Như một ví dụ thúc đẩy, bạn sẽ có một bước đi khác về vấn đề được giải quyết trong Mô
hình phương pháp nhà máy và Triển khai của nó bằng Python : với một Để cụ thể hơn, bạn muốn triển khai mã hoạt động như sau: >>>
Hãy giả sử rằng bạn may mắn và bắt gặp việc triển khai của bên thứ ba một số định dạng mà bạn cần tuần tự hóa tới và nó được tổ chức như một gói không gian tên:
Tệp
Giao diện serializer này có một chút hạn chế, nhưng nó sẽ đủ để chứng minh cách hoạt động của các gói không gian tên. Tệp
Lưu ý rằng cả hai
lớp thực hiện cùng một giao diện với Sau đó, bạn tạo một
A Giả sử rằng bạn đã cài đặt >>>
Bằng cách cung cấp các đối tượng serializer khác nhau Lưu ý: Bạn có thể nhận được một Càng xa càng tốt. Tuy nhiên, bây giờ bạn nhận ra rằng bạn cũng cần phải chuyển đổi các bài hát của mình thành biểu diễn YAML , không được hỗ trợ trong thư viện của bên thứ ba. Nhập sự kỳ diệu của các gói không gian tên: bạn có thể thêm gói của
riêng mình Đầu tiên, tạo một thư mục trên hệ thống tệp cục bộ của bạn có tên
Trong
Vì YAML và JSON là các định dạng khá giống nhau, bạn có thể sử dụng lại hầu hết việc triển khai
Lưu ý rằng dấu Tiếp tục ví dụ trên, bây giờ bạn cũng có thể chuyển đổi bài hát sang YAML: >>>
Cũng giống như các mô-đun và gói thông thường, các gói không gian tên phải được tìm thấy trên đường dẫn nhập Python. Nếu bạn đang làm theo cùng với các ví dụ trước, thì có thể bạn đã gặp vấn đề với việc không tìm thấy Python Lưu ý: Trong ví dụ ban đầu , việc lựa chọn bộ nối tiếp được thực hiện linh hoạt hơn. Bạn sẽ thấy cách sử dụng các gói không gian tên trong một mẫu phương pháp gốc thích hợp sau này . Bạn cũng nên đảm bảo rằng thư viện cục bộ của bạn có sẵn giống như một gói thông thường. Như đã giải thích ở trên, bạn có thể thực hiện việc này bằng cách chạy Python từ thư mục thích hợp hoặc bằng cách sử dụng Trong ví dụ này, bạn đang thử nghiệm cách tích hợp gói bên thứ ba giả mạo với gói cục bộ của
mình. Nếu Ngoài ra, bạn có thể làm rối với đường dẫn
nhập của mình. Đặt >>>
Giờ đây, bạn có thể sử dụng tất cả các bộ tuần tự hóa mà không cần lo lắng về việc chúng được xác định trong gói của bên thứ ba hay cục bộ. Hướng dẫn kiểu nhập khẩuPEP 8 , hướng dẫn kiểu Python, có một số khuyến nghị về việc nhập . Như mọi khi với Python, giữ cho mã của bạn vừa có thể đọc được vừa có thể bảo trì là một điều quan trọng cần cân nhắc. Dưới đây là một số quy tắc chung về cách tạo kiểu cho các mục nhập của bạn:
Dưới đây là ví dụ về phần nhập bên trong gói trình đọc nguồn cấp dữ liệu Python thực :
Lưu ý cách nhóm này làm cho
các phụ thuộc của mô-đun này rõ ràng: Có những trường hợp nên uốn cong những quy tắc này một chút. Bạn đã thấy rằng nhập khẩu tương đối có thể là một giải pháp thay thế cho việc tổ chức phân cấp gói. Sau đó , bạn sẽ thấy cách trong một số trường hợp, bạn có thể chuyển nhập vào một định nghĩa hàm để phá vỡ các chu kỳ nhập. Nhập tài nguyênĐôi khi bạn sẽ có mã phụ thuộc vào tệp dữ liệu hoặc các tài nguyên khác. Trong các tập lệnh nhỏ, đây không phải là vấn đề — bạn có thể chỉ định đường dẫn đến tệp dữ liệu của mình và tiếp tục! Tuy nhiên, nếu tệp tài nguyên quan trọng đối với gói của bạn và bạn muốn phân phối gói của mình cho những người dùng khác, thì một số thách thức sẽ phát sinh:
Đã có một số nỗ lực để
giải quyết những thách thức này, bao gồm cả Giới thiệu importlib.resources
Điều này có một vài lợi thế. Bằng cách sử dụng lại hệ thống nhập, bạn sẽ có cách xử lý các tệp bên trong các gói của mình một cách nhất quán hơn. Nó cũng cho phép bạn truy cập dễ dàng hơn vào các tệp tài nguyên trong các gói khác. Tài liệu tóm tắt nó một cách độc đáo:
Backport tương thích với Python 2.7 cũng như Python 3.4 và các phiên bản mới hơn. Có một yêu cầu khi sử dụng Ví dụ đầu tiên, giả sử bạn có tài nguyên bên trong một gói như thế này:
Sau đó, bạn có thể sử
dụng >>>
Lưu ý: Để sử dụng backport một cách liền mạch trên các phiên bản Python cũ hơn, bạn có thể nhập
Xem phần mẹo và thủ thuật của hướng dẫn này để biết thêm thông tin. Phần còn lại của phần này sẽ trình bày một vài ví dụ phức tạp về việc sử dụng tệp tài nguyên trong thực tế. Ví dụ: Sử dụng tệp dữ liệuLà một ví dụ đầy đủ hơn về việc sử dụng tệp dữ liệu, bạn sẽ thấy cách triển khai chương trình đố vui dựa trên dữ liệu dân số của Liên hợp quốc . Đầu tiên, hãy tạo một
Mở tệp CSV và xem dữ liệu:
Mỗi dòng chứa dân số của một quốc gia trong một năm nhất định và một biến thể nhất định, cho biết loại kịch bản nào được sử dụng cho dự báo. Tệp này chứa các dự báo về dân số cho đến năm 2100. Hàm sau đọc tệp này và chọn ra tổng dân số của mỗi quốc gia cho một
Các dòng được đánh dấu hiển thị cách Hàm trên trả về một từ điển với các số dân số: >>>
Bạn có thể làm bất kỳ điều gì thú vị với từ điển dân số này, bao gồm cả phân tích và hình dung. Tại đây, bạn sẽ tạo một trò chơi đố yêu cầu người dùng xác định quốc gia nào trong tập hợp là đông dân nhất. Chơi trò chơi sẽ trông giống như sau:
Các chi tiết của việc thực hiện nằm quá xa chủ đề của hướng dẫn này, vì vậy chúng sẽ không được thảo luận ở đây. Tuy nhiên, bạn có thể mở rộng phần bên dưới để xem mã nguồn hoàn chỉnh. Ví dụ: Thêm biểu tượng vào Tkinter GUIsKhi xây dựng giao diện người dùng đồ họa (GUI), bạn thường cần bao gồm các tệp tài nguyên như biểu tượng. Ví dụ sau đây cho thấy cách bạn có thể làm điều đó bằng cách sử dụng Ví dụ sử dụng Tkinter , là một gói GUI có sẵn trong thư viện tiêu chuẩn. Nó dựa trên hệ thống cửa sổ Tk , ban đầu được phát triển cho ngôn ngữ lập trình Tcl. Có nhiều gói GUI khác có sẵn cho Python. Nếu bạn đang sử dụng một biểu tượng khác, thì bạn sẽ có thể thêm các biểu tượng vào ứng dụng của mình bằng cách sử dụng các ý tưởng tương tự như những biểu tượng được trình bày ở đây. Trong Tkinter, hình ảnh được xử lý bởi Hãy nhớ rằng, khi phân phối gói của bạn, bạn thậm chí không được đảm bảo
rằng các tệp tài nguyên sẽ tồn tại dưới dạng tệp vật lý trên hệ thống tệp. Để đảm bảo mọi tệp tạm thời được dọn dẹp đúng cách, bạn nên sử dụng >>>
Đối với ví dụ đầy đủ, giả sử bạn có cấu trúc phân cấp tệp sau:
Nếu bạn muốn tự mình thử ví dụ, thì bạn có thể tải xuống các tệp này cùng với phần còn lại của mã nguồn được sử dụng trong hướng dẫn này bằng cách nhấp vào liên kết bên dưới: Mã được lưu trữ trong một tệp có tên đặc biệt Để biết thêm thông tin về cách gọi một gói với GUI được định nghĩa trong một lớp được gọi là
Nếu bạn muốn tìm hiểu thêm về cách xây dựng GUI với Tkinter, hãy xem Lập trình GUI Python với Tkinter . Tài liệu chính thức cũng có một danh sách tài nguyên tuyệt vời để bắt đầu và hướng dẫn tại TkDocs là một tài nguyên tuyệt vời khác chỉ ra cách sử dụng Tk trong các ngôn ngữ khác. Lưu ý: Một nguồn gốc của sự nhầm lẫn và thất vọng khi làm việc với hình ảnh trong Tkinter là bạn phải đảm bảo rằng hình ảnh không được thu gom rác . Do cách Python và Tk tương tác, trình thu gom rác bằng Python (ít nhất là trong CPython ) không
đăng ký rằng hình ảnh được sử dụng bởi Để đảm bảo rằng các hình ảnh được lưu giữ xung quanh, bạn nên thêm một tham chiếu đến chúng theo cách thủ công. Bạn có thể xem ví dụ về điều này trong đoạn mã trên ở dòng 18 và 31 . Nhập độngMột trong những đặc điểm nổi bật của Python là nó là một ngôn ngữ rất năng động. Mặc dù đôi khi một ý tưởng tồi, bạn có thể làm nhiều việc để một chương trình Python khi nó đang chạy, bao gồm thêm
các thuộc tính thành một lớp, xác định lại phương pháp, hoặc thay đổi docstring của một module. Ví dụ: bạn có thể thay đổi >>>
Về mặt kỹ thuật, bạn không định nghĩa lại Lưu ý: Trong ví dụ trên, bạn xác định lại >>>
Để tìm hiểu thêm về các hàm lambda, hãy xem Cách sử dụng các hàm Lambda trong Python . Trong phần này, bạn sẽ học cách nhập động bằng Python. Với chúng, bạn sẽ không phải quyết định nhập những gì cho đến khi chương trình của bạn đang chạy. Sử dụng importlibCho đến nay, bạn đã sử dụng
Trong mỗi trường hợp, mô-đun được nhập động bằng Ví dụ: Phương pháp ban đầu với các gói không gian tênHãy nghĩ lại ví dụ về serializers trước đó. Với Thêm mã sau vào
Nhà Nhà máy đưa ra một số giả định mạnh mẽ về việc đặt tên cho cả mô-đun và lớp chứa các bộ tuần tự riêng lẻ. Trong phần tiếp theo , bạn sẽ tìm hiểu về kiến trúc plugin cho phép linh hoạt hơn. Bây giờ bạn có thể tạo lại ví dụ trước đó như sau: >>>
Trong trường hợp này, bạn không cần nhập từng bộ nối tiếp một cách rõ ràng nữa. Thay vào đó, bạn chỉ định tên của bộ nối tiếp bằng một chuỗi. Chuỗi thậm chí có thể được chọn bởi người dùng của bạn trong thời gian chạy. Lưu ý: Trong một gói thông thường, bạn có thể đã triển khai Tuy nhiên, các
gói không gian tên không được phép sử dụng Ví dụ cuối cùng cho thấy rằng bạn cũng nhận được một thông báo lỗi khá nếu bạn cố gắng tuần tự hóa sang một định dạng chưa được triển khai. Ví dụ: Một gói các pluginHãy xem xét một ví dụ khác về việc sử dụng nhập động. Bạn có thể sử dụng mô-đun sau để thiết lập kiến trúc plugin linh hoạt trong mã của mình. Điều này tương tự như ví dụ trước, trong đó bạn có thể cắm bộ tuần tự cho các định dạng khác nhau bằng cách thêm các mô-đun mới. Một ứng dụng sử dụng plugin hiệu quả là công cụ trực quan hóa khám phá Keo . Keo có thể đọc nhiều định dạng dữ liệu khác nhau ra khỏi hộp. Tuy nhiên, nếu định dạng dữ liệu của bạn không được hỗ trợ, thì bạn có thể viết trình tải dữ liệu tùy chỉnh của riêng mình . Bạn làm điều này bằng cách thêm một chức năng mà bạn trang trí và đặt ở một vị trí đặc biệt để Keo dễ dàng tìm thấy. Bạn không cần phải thay đổi bất kỳ phần nào của mã nguồn Keo. Xem tài liệu để biết tất cả các chi tiết. Bạn có thể thiết lập một kiến trúc plugin tương tự mà bạn có thể sử dụng trong các dự án của riêng mình. Trong kiến trúc, có hai cấp độ:
Các
Các chức năng gốc được sử dụng để thêm chức năng vào các gói plugin một cách thuận tiện. Bạn sẽ thấy một số ví dụ về cách chúng được sử dụng trong thời gian ngắn. Xem xét tất cả các chi tiết của mã này nằm ngoài phạm vi của hướng dẫn này. Nếu bạn quan tâm, thì bạn có thể xem cách triển khai bằng cách mở rộng phần bên dưới. Hãy xem một số ví dụ về cách sử dụng plugin. Ví dụ đầu tiên là một Giả sử bạn có
Mỗi
Để tìm hiểu thêm về trình trang trí và cách chúng được sử dụng, hãy xem Primer trên Trình trang trí Python . Lưu ý: Để đơn giản hóa việc khám phá và nhập các plugin, tên của mỗi plugin dựa trên tên của mô-đun chứa nó thay vì tên chức năng. Điều này hạn chế bạn chỉ có một plugin cho mỗi tệp. Để hoàn tất thiết lập
Bây giờ bạn có thể sử dụng >>>
Lưu ý rằng Bạn cũng có thể chọn một cách linh hoạt hơn plugin nào để gọi. Trong ví dụ sau, bạn chọn một plugin một cách ngẫu nhiên. Tuy nhiên, bạn cũng có thể chọn một plugin dựa trên tệp cấu hình hoặc thông tin người dùng nhập: >>>
Để
khám phá và gọi các plugin khác nhau, bạn cần nhập chúng. Hãy xem nhanh cách
Hãy kết thúc phần này với phiên bản cuối cùng của gói không gian tên serializers . Một vấn đề nổi bật là Đầu tiên, thêm một dòng đăng ký từng bộ tuần tự. Đây là một
ví dụ về cách nó được thực hiện trong bộ
Tiếp theo, cập nhật
Bạn thực hiện Để biết thêm thông tin về cách sử dụng plugin, hãy xem PyPlugs trên PyPI và Plugin: Thêm tính linh hoạt cho bản trình bày Ứng dụng của bạn từ PyCon 2019 . Hệ thống nhập PythonBạn đã thấy nhiều cách để tận dụng hệ thống nhập của Python. Trong phần này, bạn sẽ tìm hiểu thêm một chút về những gì xảy ra đằng sau khi các mô-đun và gói được nhập. Như với hầu hết các phần của Python, hệ thống nhập có thể được tùy chỉnh. Bạn sẽ thấy một số cách mà bạn có thể thay đổi hệ thống nhập, bao gồm tự động tải xuống các gói bị thiếu từ PyPI và nhập tệp dữ liệu như thể chúng là mô-đun. Nhập nội bộChi tiết của hệ thống nhập Python được mô tả trong tài liệu chính thức . Ở cấp độ cao, ba điều xảy ra khi bạn nhập một mô-đun (hoặc gói). Mô-đun là:
Đối với các lần nhập thông thường — những lần nhập được thực hiện với Ví dụ: các phương pháp nhập và đổi tên sau >>>
Tất nhiên, trong mã bình thường, bạn nên thích cái trước hơn. Một điều cần lưu ý là, ngay cả khi bạn chỉ nhập một thuộc tính từ một mô-đun, toàn bộ mô-đun được tải và thực thi. Phần còn lại của nội dung của mô-đun chỉ không bị ràng buộc với không gian tên hiện tại. Một cách để chứng minh điều này là xem xét những gì được gọi là bộ đệm ẩn mô-đun : >>>
Bộ đệm ẩn mô-đun đóng một vai trò rất quan trọng trong hệ thống nhập Python. Nơi đầu tiên Python tìm kiếm các mô-đun khi thực hiện nhập là ở trong Đây là một sự tối ưu hóa tuyệt vời, nhưng nó cũng là một điều cần thiết. Nếu các mô-đun được tải lại mỗi khi chúng được nhập, thì bạn có thể gặp phải sự mâu thuẫn trong một số trường hợp nhất định, chẳng hạn như khi mã nguồn cơ bản thay đổi trong khi tập lệnh đang chạy. Nhớ lại đường dẫn nhập bạn đã thấy trước đó. Về cơ bản, nó cho Python biết nơi tìm kiếm các mô-đun. Tuy nhiên, nếu Python tìm thấy một mô-đun trong bộ đệm ẩn của mô-đun, thì nó sẽ không bận tâm tìm kiếm đường dẫn nhập cho mô-đun. Ví dụ: Singletons dưới dạng Mô-đunTrong lập trình hướng đối tượng , một singleton là một lớp có nhiều nhất một thể hiện. Mặc dù có thể triển khai các singleton bằng Python , nhưng thay vào đó, hầu hết các ứng dụng tốt của các singleton có thể được xử lý bởi các mô-đun. Bạn có thể tin tưởng bộ đệm ẩn mô-đun để khởi tạo một lớp chỉ một lần. Để làm ví dụ, hãy quay lại dữ liệu dân số của Liên hợp quốc mà bạn đã thấy trước đó . Mô-đun sau định nghĩa một lớp bao bọc dữ liệu dân số:
Việc đọc dữ liệu từ đĩa mất một chút thời gian. Vì bạn không mong đợi tệp dữ liệu thay đổi, bạn khởi tạo lớp khi bạn tải mô-đun. Tên của lớp bắt đầu bằng dấu gạch dưới để cho người dùng biết rằng họ không nên sử dụng nó. Bạn có thể sử dụng >>>
Điều này tạo ra một biểu đồ như sau: Lưu ý rằng tải dữ liệu vào thời điểm nhập khẩu là một loại antipattern . Tốt nhất, bạn muốn hàng nhập khẩu của mình không có tác dụng phụ càng tốt. Một cách tiếp cận tốt hơn là tải dữ liệu một cách lười biếng khi bạn cần. Bạn có thể làm điều này một cách khá thanh lịch bằng cách sử dụng thuộc tính Mở rộng phần sau để xem ví dụ. Đang tải lại các mô-đunBộ nhớ cache của mô-đun có thể hơi khó chịu khi bạn đang làm việc trong trình thông dịch tương tác. Việc tải lại một mô-đun sau khi bạn thay đổi nó không phải là chuyện nhỏ. Ví dụ: hãy xem mô-đun sau: Là một phần của thử nghiệm và gỡ lỗi mô-đun này, bạn nhập nó vào bảng điều khiển Python: >>>
Giả sử bạn nhận ra rằng bạn có lỗi trong mã của mình, vì vậy bạn cập nhật Quay lại bảng điều khiển của bạn, bạn nhập mô-đun đã cập nhật để xem hiệu quả của việc sửa lỗi của bạn: >>>
Tại sao câu trả lời vẫn là Giải pháp đơn giản nhất cho điều này là thoát khỏi bảng điều khiển Python và khởi động lại nó. Điều này buộc Python cũng phải xóa bộ nhớ cache mô-đun của nó: >>>
Tuy nhiên, việc khởi động lại trình thông dịch không phải lúc nào cũng khả thi. Bạn có thể đang ở trong một phiên phức tạp hơn khiến bạn mất nhiều thời gian để thiết lập. Nếu đúng như vậy, bạn có thể sử dụng >>>
Lưu ý rằng Finders and LoadersBạn đã
thấy trước đó rằng việc tạo các mô-đun có cùng tên với các thư viện tiêu chuẩn có thể tạo ra vấn đề. Ví dụ: nếu bạn có một tệp có tên Tuy nhiên, điều này không phải luôn luôn như vậy. Tạo một tệp có tên
Tiếp theo, mở trình thông dịch Python và nhập mô-đun mới này: >>>
Có điều gì đó kỳ lạ đã xảy ra. Có vẻ như Python không phải là nhập >>>
Bạn có thể thấy nó Lưu ý: Các mô-đun tích hợp được biên dịch thành trình thông dịch Python. Thông thường, chúng module nền tảng như Hãy tìm hiểu sâu hơn nữa về hệ thống nhập của Python. Điều này cũng sẽ cho thấy lý do tại sao các mô-đun tích hợp sẵn không bị che bởi các mô-đun cục bộ. Có một số bước liên quan khi nhập một mô-đun:
Bạn có thể mở rộng hệ thống nhập Python bằng cách triển khai công cụ tìm của riêng bạn và nếu cần, trình tải của riêng bạn. Bạn sẽ thấy một ví dụ hữu ích hơn về công cụ tìm kiếm sau này. Hiện tại, bạn sẽ học cách thực hiện các tùy chỉnh cơ bản (và có thể ngớ ngẩn) của hệ thống nhập.
>>>
Trước tiên, hãy lưu ý rằng điều này trả lời câu hỏi trước đó: các
mô-đun tích hợp sẵn không bị che khuất bởi các mô-đun cục bộ vì công cụ tìm tích hợp được gọi trước công cụ tìm đường dẫn nhập, công cụ này tìm thấy các mô-đun cục bộ. Thứ hai, lưu ý rằng bạn có thể tùy chỉnh Để nhanh chóng làm rối phiên Python của bạn, bạn có thể xóa tất cả các công cụ tìm kiếm: >>>
Vì không có công cụ tìm kiếm, Python không thể tìm hoặc nhập các mô-đun mới. Tuy nhiên, Python vẫn có thể nhập các mô-đun đã có trong bộ nhớ cache của mô-đun vì nó trông ở đó trước khi gọi bất kỳ công cụ tìm kiếm nào. Trong ví dụ trên, Sau đây là một ví dụ hữu ích hơn một chút. Bạn sẽ viết một công cụ tìm để in một thông báo tới bảng điều khiển xác định mô-đun đang được nhập. Ví dụ cho thấy cách thêm công cụ tìm của riêng bạn, mặc dù nó không thực sự cố gắng tìm một mô-đun:
Tất cả các trình tìm kiếm phải triển khai một
Bản Lưu ý: Vì Python trả về ngầm định Bằng cách chèn >>>
Ví dụ: bạn có thể thấy rằng việc nhập Ví dụ khác, giả sử rằng bạn đang tìm cách loại bỏ thế giới của các biểu thức chính quy . (Bây giờ, tại sao bạn lại muốn một thứ như vậy? Biểu thức chính quy thật tuyệt vời !) Bạn có thể triển khai công cụ tìm kiếm sau để cấm
Nâng cao một >>>
Mặc dù bạn chỉ đang nhập Ví dụ: Tự động cài đặt từ PyPIBởi vì hệ thống nhập Python đã khá mạnh mẽ và hữu ích, có nhiều cách để làm rối tung nó hơn là mở rộng nó một cách hữu ích. Tuy nhiên, ví dụ sau đây có thể hữu ích trong một số trường hợp nhất định. Các Python Package Index (PyPI) là một cửa của bạn cửa hàng phô mai cho việc tìm kiếm các module và các gói của bên thứ ba. Nó cũng là nơi Trong các hướng dẫn Real Python khác , bạn có thể đã xem hướng dẫn sử dụng Cảnh báo: Trong hầu hết các trường hợp, thực sự sẽ không tuyệt vời nếu Python tự động cài đặt các mô-đun. Ví dụ: trong hầu hết các cài đặt sản xuất, bạn muốn kiểm soát môi trường của
mình. Hơn nữa, tài liệu cảnh báo không sử dụng Để tránh làm xáo trộn quá trình cài đặt Python của bạn, bạn chỉ nên sử dụng mã này trong những môi trường mà bạn không ngại xóa hoặc cài đặt lại. Công cụ tìm kiếm sau cố gắng cài đặt các mô-đun bằng cách sử dụng
So với các công cụ tìm bạn đã thấy trước
đó, công cụ này phức tạp hơn một chút. Bằng cách đặt công cụ tìm kiếm này cuối cùng trong danh sách công cụ tìm kiếm, bạn biết rằng nếu bạn gọi Cố gắng sử dụng >>>
Thông thường, Mặc dù Sử dụng >>>
Điều này có thể gây ra hậu quả tai hại cho dự án của bạn. Một tình huống trong đó cài đặt tự động có thể khá hữu ích là khi bạn đang chạy Python trên đám mây với quyền kiểm soát hạn chế hơn đối với môi trường của bạn, chẳng hạn như khi bạn đang chạy sổ ghi chép kiểu Jupyter tại Google Colaboratory . Môi trường máy tính xách tay Colab rất tuyệt vời để thực hiện khám phá dữ liệu hợp tác. Một máy tính xách tay điển hình đi kèm với nhiều gói khoa học dữ liệu được cài đặt, bao gồm NumPy , Pandas và Matplotlib và bạn có thể thêm các gói mới với Vì Ví dụ: Nhập tệp dữ liệuVí dụ cuối cùng trong phần này được lấy cảm hứng từ bài đăng blog tuyệt vời của Aleksey Bilogur Nhập hầu hết mọi thứ bằng Python: Giới thiệu về Trình tải và Trình tìm mô-đun . Bạn đã thấy cách sử dụng Trước đó , bạn đã làm việc với một tệp CSV khổng lồ với dữ liệu dân số. Để làm cho ví dụ về trình tải tùy chỉnh dễ quản lý hơn, hãy xem
xét
Dòng đầu tiên là tiêu đề đặt tên cho ba trường và hai hàng dữ liệu sau, mỗi hàng chứa thông tin về một nhân viên. Để biết thêm thông tin về cách làm việc với tệp CSV, hãy xem Đọc và Viết tệp CSV bằng Python . Mục tiêu của bạn trong phần này là viết một công cụ tìm và một trình tải cho phép bạn nhập trực tiếp tệp CSV để bạn có thể viết mã như sau: >>>
Công việc của công cụ tìm kiếm sẽ là tìm kiếm và nhận dạng các tệp CSV. Công việc của trình tải sẽ là nhập dữ liệu CSV. Thông thường, bạn có thể triển khai các trình tìm kiếm và trình tải tương ứng trong một lớp chung. Đó là cách tiếp cận bạn sẽ thực hiện ở đây:
Có khá nhiều mã trong ví dụ này! May mắn thay, hầu hết công việc được thực hiện trong Như bạn đã thấy trước đó, Đối với nhập khẩu cấp cao nhất, Dữ liệu CSV được tải bởi Ví dụ: thêm >>>
Nói chung, tên trường CSV có thể chứa khoảng trắng và các ký tự khác không được phép trong tên thuộc tính
Python. Trước khi thêm các trường làm thuộc tính trên mô-đun, bạn làm sạch tên trường bằng biểu thức chính quy . Điều này được thực hiện khi Bạn có thể xem ví dụ về hiệu ứng này trong Bằng cách kết nối điều
này Mẹo và thủ thuật nhập khẩuĐể hoàn thiện hướng dẫn này, bạn sẽ thấy một vài mẹo về cách xử lý các tình huống nhất định thỉnh thoảng xuất hiện. Bạn sẽ thấy cách xử lý các gói bị thiếu, nhập theo chu kỳ và thậm chí các gói được lưu trữ bên trong tệp ZIP. Xử lý các gói trên các phiên bản PythonĐôi khi
bạn cần xử lý các gói có tên khác nhau tùy thuộc vào phiên bản Python. Bạn đã thấy một ví dụ về điều này: Miễn là các phiên bản khác nhau của gói tương thích,
bạn có thể xử lý điều này bằng cách đổi tên gói bằng
Trong phần còn lại của mã, bạn có thể tham khảo Thông thường, dễ nhất là sử dụng một Bạn có thể viết lại ví dụ trước như sau:
Điều này sẽ sử dụng Xử lý các gói bị thiếu: Sử dụng một gói thay thếTrường hợp sử dụng sau có liên quan chặt chẽ với ví dụ trước. Giả sử có một gói tái thực hiện tương thích. Việc thực hiện lại được tối ưu hóa tốt hơn, vì vậy bạn muốn sử dụng nó nếu nó có sẵn. Tuy nhiên, gói gốc dễ có sẵn hơn và cũng mang lại hiệu suất chấp nhận được. Một ví dụ như vậy là
Điều này sẽ sử dụng Một ví dụ tương tự khác là gói UltraJSON , một bộ mã hóa và giải mã JSON cực nhanh có thể được sử dụng để thay thế
Bằng cách đổi
tên Xử lý các gói bị thiếu: Sử dụng Mock để thay thếVí dụ thứ ba, có liên quan là thêm một gói cung cấp một tính năng tuyệt vời không cần thiết cho ứng dụng của bạn. Một lần nữa, điều này có thể được giải quyết bằng cách thêm Ví dụ cụ thể, giả sử rằng bạn đang sử dụng Colorama để thêm văn bản màu trong bảng điều khiển. Colorama chủ yếu bao gồm các hằng số chuỗi đặc biệt thêm màu khi in: >>>
Thật không may, màu không hiển thị trong ví dụ trên. Trong thiết bị đầu cuối của bạn, nó sẽ trông giống như sau: Trước khi bắt đầu sử dụng màu Colorama, bạn nên gọi điện Nếu bạn muốn tất cả đầu ra của mình là (ví dụ) màu xanh lam, thì bạn có thể để >>>
Bạn cũng có thể sử dụng Cuối cùng,
Lưu ý cách bộ đếm giữ nguyên vị trí thay vì in trên các dòng riêng biệt như bình thường: Hãy quay trở lại nhiệm vụ trong tầm tay. Đối với nhiều ứng dụng, việc thêm màu vào đầu ra bảng điều khiển của bạn là một điều tuyệt vời nhưng không quá quan trọng. Để tránh thêm phụ thuộc khác vào ứng dụng của mình, bạn chỉ muốn sử dụng Colorama nếu nó có sẵn trên hệ thống và không phá vỡ ứng dụng nếu không có. Để làm điều này, bạn có thể lấy cảm hứng từ thử nghiệm và việc sử dụng mô phỏng . Một mô hình có thể thay thế cho một đối tượng khác trong khi vẫn cho phép bạn kiểm soát hành vi của nó. Đây là một nỗ lực ngây thơ nhằm chế nhạo Colorama: >>>
Điều này không hoàn toàn hiệu quả, vì Có thể thay đổi giá trị trả lại
Bí quyết cuối cùng là Các
Nếu bạn chạy tập lệnh này trên một hệ thống không có sẵn Colorama, thì nó vẫn hoạt động, nhưng có thể trông không đẹp: Với Colorama được cài đặt, bạn sẽ thấy kết quả tương tự như trước đó. Nhập tập lệnh dưới dạng mô-đunMột điểm khác biệt giữa các tập lệnh và mô-đun thư viện là các tập lệnh thường làm một việc gì đó, trong khi các thư viện cung cấp chức năng. Cả hai tập lệnh và thư viện đều nằm bên trong các tệp Python thông thường và theo như Python có liên quan, không có sự khác biệt giữa chúng. Thay vào đó, sự khác biệt nằm ở cách tệp được sử dụng: nó nên được thực thi với Đôi khi bạn sẽ có một mô-đun hoạt động như một tập lệnh và một thư viện. Bạn có thể cố gắng cấu trúc lại mô-đun của mình thành hai tệp khác nhau. Một ví dụ về điều này trong thư viện chuẩn là
Vì JSON thường chỉ được đọc bởi máy, nhiều tệp JSON không được định dạng theo cách có thể đọc được. Trên thực tế, việc các tệp JSON bao gồm một dòng văn bản rất dài là điều khá phổ biến.
Giờ đây, cấu trúc của tệp JSON trở nên ít
phức tạp hơn nhiều để nắm bắt. Bạn có thể sử dụng Mặc dù thực hành tốt để phân chia tập lệnh và thư viện, Python có một thành ngữ giúp bạn có thể coi một mô-đun vừa là tập lệnh vừa là thư viện cùng một lúc. Như đã lưu ý trước đó , giá trị của Hãy thử nghiệm nó ra! Tạo tệp sau:
Nếu bạn chạy tệp này, thì bạn sẽ thấy tệp đó
Tuy nhiên, nếu bạn nhập mô-đun, thì Hành vi này được tận dụng theo mô hình sau:
Hãy sử dụng điều này trong một ví dụ lớn hơn. Trong một nỗ lực để giữ cho bạn trẻ , tập lệnh sau sẽ thay thế bất kỳ độ tuổi “già” nào (
Bạn có thể chạy tập lệnh này dưới dạng tập lệnh và nó sẽ tương tác làm cho độ tuổi bạn nhập trẻ hơn:
Bạn cũng có thể sử dụng mô-đun như một thư viện có thể nhập. Bài >>>
Nếu không có sự bảo vệ của Chạy tập lệnh Python từ tệp ZIPMột tính năng hơi khó hiểu của Python là nó có thể chạy các tập lệnh được đóng gói thành các tệp ZIP . Ưu điểm chính của việc này là bạn có thể phân phối một gói đầy đủ dưới dạng một tệp duy nhất. Tuy nhiên, lưu ý rằng điều này vẫn yêu cầu Python phải được cài đặt trên hệ thống. Nếu bạn muốn phân phối ứng dụng Python của mình dưới dạng tệp thực thi độc lập, hãy xem Sử dụng PyInstaller để dễ dàng phân phối ứng dụng Python . Nếu bạn cung cấp cho trình thông dịch Python một tệp ZIP , thì nó sẽ tìm kiếm một tệp có tên
Điều này sẽ in một thông báo khi bạn chạy nó:
Bây giờ hãy thêm nó vào kho lưu trữ ZIP. Bạn có thể thực hiện việc này trên dòng lệnh:
Trên Windows, thay vào đó, bạn có thể sử dụng trỏ và nhấp . Chọn tệp trong File Explorer, sau đó nhấp chuột phải và chọn Gửi đến → Thư mục nén (nén) . Vì
Lưu ý rằng tập lệnh của bạn biết rằng nó nằm bên trong Hãy nhớ lại ví dụ trước đó, trong đó bạn đã tạo một bài kiểm
tra dựa trên dữ liệu dân số . Có thể phân phối toàn bộ ứng dụng này dưới dạng một tệp ZIP duy nhất. Ứng dụng bao gồm các tệp sau:
Bạn có thể thêm chúng vào tệp ZIP theo cách tương tự như bạn đã làm ở trên. Tuy nhiên, Python đi kèm với một công cụ được gọi là
Về cơ bản, lệnh này thực hiện hai việc: nó tạo một điểm vào và đóng gói ứng dụng của bạn. Hãy nhớ rằng bạn cần một
Điều này Lưu ý: Theo mặc định, Tuy nhiên, tính năng này chỉ có
sẵn trong Python 3.7 trở lên. Xem Trên Windows,
Các
Lưu ý Lưu ý: Trên Python 3.6 trở lên, lệnh trước đó sẽ không thành công với thông báo rằng nó không thể tìm thấy tài nguyên dữ liệu dân số trong Một cách giải quyết là cung cấp đường dẫn tuyệt đối đến
Các Hãy kết thúc phần này bằng cách xem một hiệu ứng đẹp của việc sử dụng
Một cách phổ biến hơn để mở tệp dữ liệu
là định vị chúng dựa trên
Cách tiếp cận này thường hoạt động tốt. Tuy nhiên, nó sẽ sụp đổ khi ứng dụng của bạn được đóng gói thành một tệp ZIP:
Tệp dữ liệu của bạn nằm trong kho lưu trữ ZIP, vì vậy bạn Xử lý nhập khẩu theo chu kỳNhập theo chu kỳ xảy ra
khi bạn có hai hoặc nhiều mô-đun nhập lẫn nhau. Cụ thể hơn, hãy tưởng tượng rằng mô-đun Hệ thống nhập của Python ở một mức độ nào đó được thiết kế để xử lý các chu trình nhập. Ví dụ, đoạn mã sau — mặc dù không hữu ích lắm — chạy tốt:
Cố gắng nhập cũng như >>>
Lưu ý rằng Khi bạn nhập Bạn cũng có thể có các mô-đun làm điều gì đó hữu ích hơn một chút. Nếu bạn xác định các thuộc tính và chức năng trong các mô-đun của mình, thì tất cả vẫn hoạt động:
Việc
nhập >>>
Các vấn đề liên quan đến nhập đệ quy bắt đầu xuất hiện khi bạn thực sự sử dụng mô-đun khác tại thời điểm nhập thay vì chỉ xác định các chức năng sẽ sử dụng mô-đun khác sau này. Thêm một dòng vào
Bây giờ Python bị nhầm lẫn bởi việc nhập: >>>
Thông báo lỗi thoạt đầu có vẻ hơi khó hiểu. Nhìn lại
mã nguồn, bạn có thể xác nhận rằng nó Vấn đề là nó Để thêm vào sự nhầm lẫn, bạn sẽ không gặp vấn đề gì khi nhập >>>
Theo thời gian >>>
Vậy làm thế nào để bạn có thể tránh bị sa lầy và bối rối trước việc nhập khẩu theo chu kỳ? Việc có hai hoặc nhiều mô-đun nhập lẫn nhau thường là một dấu hiệu cho thấy bạn có thể cải thiện thiết kế các mô-đun của mình. Thông thường, thời điểm dễ dàng nhất để sửa lỗi nhập theo chu kỳ là trước khi bạn triển khai chúng. Nếu bạn thấy các chu kỳ trong bản phác thảo kiến trúc của mình, hãy xem kỹ hơn và cố gắng phá vỡ các chu kỳ . Tuy nhiên, có những thời điểm hợp lý để giới thiệu một chu kỳ nhập khẩu. Như bạn đã thấy ở trên, đây không phải là vấn đề miễn là các mô-đun của bạn chỉ xác định các thuộc tính, hàm, lớp, v.v. Mẹo thứ hai — cũng là một phương pháp thiết kế tốt — là giữ cho các mô-đun của bạn không có tác dụng phụ tại thời điểm nhập . Nếu bạn thực sự cần các mô-đun có chu kỳ nhập và các tác dụng phụ, vẫn còn một cách khác: thực hiện nhập cục bộ bên trong các chức năng của bạn . Lưu ý rằng trong đoạn mã sau,
Bây giờ không có vấn đề gì khi nhập và sử dụng >>>
Lưu ý rằng Nhập hồ sơMột mối quan tâm khi nhập một số mô-đun và gói là nó sẽ thêm vào thời gian khởi động tập lệnh của bạn. Tùy thuộc vào ứng dụng của bạn, điều này có thể quan trọng hoặc không. Kể từ khi phát hành Python 3.7 , bạn đã có một cách nhanh chóng để biết cần bao nhiêu thời gian để nhập các gói và mô-đun. Python 3.7 hỗ trợ
Các Các Hãy xem
Trong ví dụ này, quá trình nhập Đối với một ví dụ cực đoan, hãy xem xét
Trong trường hợp này, mất gần 2 giây để nhập
Phần kết luậnTrong hướng dẫn này, bạn đã biết về hệ thống nhập Python. Giống như nhiều thứ trong Python, nó khá đơn giản để sử dụng cho các tác vụ cơ bản như nhập các mô-đun và gói. Đồng thời, hệ thống nhập khẩu khá phức tạp, linh hoạt và có thể mở rộng. Bạn đã học được một số thủ thuật liên quan đến nhập mà bạn có thể tận dụng trong mã của riêng mình. Trong hướng dẫn này, bạn đã học cách:
Trong suốt hướng dẫn, bạn đã thấy nhiều liên kết để cung cấp thêm thông tin. Nguồn có thẩm quyền nhất trên hệ thống nhập Python là tài liệu chính thức:
Bạn có thể sử dụng kiến thức của mình về nhập Python bằng cách làm theo các ví dụ trong hướng dẫn này. Nhấp vào liên kết bên dưới để truy cập vào mã nguồn: |