Đã hỏi 13 năm, 9 tháng trước 13 years, 9 months ago Show Đã xem 2,0m lần 2.0m times 3365 Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm. 5 cho trong thư mục nguồn Python là gì?
Mateen Ulhaq 22.3K16 Huy hiệu vàng86 Huy hiệu bạc127 Huy hiệu đồng16 gold badges86 silver badges127 bronze badges hỏi ngày 15 tháng 1 năm 2009 lúc 20:09Jan 15, 2009 at 20:09
6 Nó từng là một phần bắt buộc của gói (gói cũ, trước 3,3 "thường xuyên", không phải là "gói tên gọi tên" mới hơn 3,3+). Đây là tài liệu.
Nhưng chỉ cần nhấp vào liên kết, nó chứa một ví dụ, thêm thông tin và giải thích về các gói không gian tên, loại gói mà không có 5.
SMCI 30.7K18 Huy hiệu vàng110 Huy hiệu bạc145 Huy hiệu đồng18 gold badges110 silver badges145 bronze badges Đã trả lời ngày 15 tháng 1 năm 2009 lúc 20:13Jan 15, 2009 at 20:13
LokilokiLoki 28.9K9 Huy hiệu vàng47 Huy hiệu bạc62 Huy hiệu Đồng9 gold badges47 silver badges62 bronze badges 4 Các tệp có tên 5 được sử dụng để đánh dấu các thư mục trên đĩa là thư mục gói Python. Nếu bạn có các tệp
và 1 là trên đường dẫn của bạn, bạn có thể nhập mã trong 2 dưới dạng
hoặc
Nếu bạn xóa tệp 5, Python sẽ không còn tìm kiếm các mô hình con bên trong thư mục đó, vì vậy cố gắng nhập mô -đun sẽ không thành công.Tệp 5 thường trống, nhưng có thể được sử dụng để xuất các phần được chọn của gói dưới tên thuận tiện hơn, giữ các hàm tiện lợi, v.v.
dựa vào cái này
Shaido 26.5K21 Huy hiệu vàng68 Huy hiệu bạc71 Huy hiệu đồng21 gold badges68 silver badges71 bronze badges Đã trả lời ngày 7 tháng 11 năm 2010 lúc 3:31Nov 7, 2010 at 3:31
Caritoscaritoscaritos Huy hiệu vàng 12k22 gold badges16 silver badges15 bronze badges 3 Ngoài việc dán nhãn thư mục là gói Python và xác định 5, 5 cho phép bạn xác định bất kỳ biến nào ở cấp gói. Làm như vậy thường thuận tiện nếu một gói định nghĩa một cái gì đó sẽ được nhập thường xuyên, theo kiểu giống như API. Mô hình này thúc đẩy việc tuân thủ các "căn hộ" tốt hơn triết lý lồng nhau ". 5 allows you to define any variable at the package level. Doing so is often convenient if a package defines something that will be imported frequently, in an API-like fashion. This pattern promotes adherence to the Pythonic "flat is better than nested"
philosophy.Một ví dụDưới đây là một ví dụ từ một trong các dự án của tôi, trong đó tôi thường xuyên nhập 7 gọi là 8 để tương tác với cơ sở dữ liệu của mình. Tôi đã viết gói "cơ sở dữ liệu" với một vài mô -đun:
5 của tôi chứa mã sau:
Vì tôi xác định 8 ở đây, tôi có thể bắt đầu một phiên mới bằng cú pháp dưới đây. Mã này sẽ giống nhau được thực hiện từ bên trong hoặc bên ngoài thư mục gói "cơ sở dữ liệu".
Tất nhiên, đây là một sự tiện lợi nhỏ - thay thế sẽ là xác định 8 trong một tệp mới như "create_session.py" trong gói cơ sở dữ liệu của tôi và bắt đầu các phiên mới bằng cách sử dụng:
đọc thêmCó một chủ đề Reddit khá thú vị bao gồm các ứng dụng thích hợp của 5 tại đây:http://www.reddit.com/r/Python/comments/1bbbwk/whats_your_opinion_on_what_to_include_in_init_py/ Ý kiến đa số dường như là các tệp 5 nên rất mỏng để tránh vi phạm "rõ ràng tốt hơn so với triết lý ngầm".Đã trả lời ngày 24 tháng 9 năm 2013 lúc 10:38Sep 24, 2013 at 10:38
Nathan Gouldnathan GouldNathan Gould 7.5652 Huy hiệu vàng16 Huy hiệu bạc15 Huy hiệu Đồng2 gold badges16 silver badges15 bronze badges 3 Có 2 lý do chính cho 5
Rajat Jain 1.2632 huy hiệu vàng15 Huy hiệu bạc28 Huy hiệu đồng2 gold badges15 silver badges28 bronze badges Đã trả lời ngày 8 tháng 4 năm 2015 lúc 8:29Apr 8, 2015 at 8:29
flyceflyceeflycee 10,9k3 Huy hiệu vàng18 Huy hiệu bạc14 Huy hiệu đồng3 gold badges18 silver badges14 bronze badges 3 Tệp 5 làm cho các thư mục xử lý Python chứa nó dưới dạng các mô -đun.Hơn nữa, đây là tệp đầu tiên được tải trong một mô -đun, vì vậy bạn có thể sử dụng nó để thực thi mã mà bạn muốn chạy mỗi khi một mô -đun được tải hoặc chỉ định các mô hình con được xuất. Đã trả lời ngày 15 tháng 1 năm 2009 lúc 20:22Jan 15, 2009 at 20:22
Berk Güdercan có thể Berk GüderCan Berk Güder 106K25 Huy hiệu vàng129 Huy hiệu bạc136 Huy hiệu đồng25 gold badges129 silver badges136 bronze badges 2
Vì Python 3.3, 5 không còn cần phải xác định các thư mục là các gói Python có thể nhập.Kiểm tra PEP 420: Gói không gian tên ngầm:
Đây là bài kiểm tra: 4Tài liệu tham khảo: https://docs.python.org/3/whatsnew/3.3.html#pep-420-implicit-maces PY không cần thiết cho các gói trong Python 3?
Đã trả lời ngày 12 tháng 10 năm 2016 lúc 6:36Oct 12, 2016 at 6:36
zeekvfuzeekvfuzeekvfu 3.2671 Huy hiệu vàng20 Huy hiệu bạc18 Huy hiệu đồng1 gold badge20 silver badges18 bronze badges 3 Mặc dù Python hoạt động mà không có tệp 5, bạn vẫn nên bao gồm một tệp.Nó chỉ định rằng thư mục nên được coi là một gói, do đó bao gồm nó (ngay cả khi nó trống). Ngoài ra còn có một trường hợp bạn thực sự có thể sử dụng tệp Hãy tưởng tượng bạn đã có cấu trúc tệp sau: 5Và 0 chứa điều này: 6Để sử dụng 1, bạn sẽ cần một trong những điều sau đây: 7Có thể ở đó bạn cần (hoặc muốn) giữ 0 bên trong 3 (ví dụ: Runtimes/Sextences) nhưng bạn chỉ muốn nhập 3.Nếu bạn đã thay đổi tên của 0 thành 5 thì bạn có thể sử dụng 1 bằng cách chỉ nhập 3: 8Điều này hoạt động vì 5 được coi là một phần của gói.Một số gói Python thực sự làm điều này. Một ví dụ là với JSON, trong đó chạy 0 thực sự đang nhập 5 từ gói 2 (xem cấu trúc tệp gói ở đây):
Đã trả lời ngày 12 tháng 5 năm 2018 lúc 15:41May 12, 2018 at 15:41
XantiumxantiumXantium 10,6K10 Huy hiệu vàng58 Huy hiệu bạc87 Huy hiệu đồng10 gold badges58 silver badges87 bronze badges Trong Python, định nghĩa của gói rất đơn giản. Giống như Java, cấu trúc phân cấp và cấu trúc thư mục là như nhau. Nhưng bạn phải có 5 trong một gói. Tôi sẽ giải thích tệp 5 với ví dụ dưới đây: 9 5 có thể trống, miễn là nó tồn tại. Nó chỉ ra rằng thư mục nên được coi là một gói. Tất nhiên, 5 cũng có thể đặt nội dung thích hợp.Nếu chúng ta thêm một hàm trong module_n1: 0Sau khi chạy: 1Sau đó, chúng tôi làm theo gói phân cấp và được gọi là MODULE_N1 hàm. Chúng ta có thể sử dụng 5 trong Subpackage_B như thế này: 2Sau khi chạy: 3Do đó, sử dụng * nhập, gói mô -đun phải tuân theo nội dung 5.
Đã trả lời ngày 9 tháng 1 năm 2014 lúc 11:45Jan 9, 2014 at 11:45
Marcus Thorntonmarcus ThorntonMarcus Thornton 5.7095 Huy hiệu vàng46 Huy hiệu bạc48 Huy hiệu đồng5 gold badges46 silver badges48 bronze badges 2 5 sẽ coi thư mục nó là một mô -đun có thể tải.Đối với những người thích đọc mã, tôi đặt bình luận của nhà giả kim hai bit ở đây. 4
Đã trả lời ngày 3 tháng 1 năm 2015 lúc 17:41Jan 3, 2015 at 17:41
B.Mr.W.B.Mr.W.B.Mr.W. 18.1K33 Huy hiệu vàng111 Huy hiệu bạc166 Huy hiệu đồng33 gold badges111 silver badges166 bronze badges 0 Nó tạo điều kiện nhập các tệp Python khác. Khi bạn đặt tệp này vào một thư mục (nói) chứa các tệp PY khác, thì bạn có thể làm một cái gì đó như nhập công cụ. 5Nếu không có 5 bên trong các công cụ thư mục, bạn không thể nhập bản khác, vì Python không biết mã nguồn cho công cụ ở đâu và không thể nhận ra nó là một gói.
Matt Fenwick 47.3K21 Huy hiệu vàng125 Huy hiệu bạc190 Huy hiệu Đồng21 gold badges125 silver badges190 bronze badges Đã trả lời ngày 15 tháng 1 năm 2009 lúc 20:18Jan 15, 2009 at 20:18
EpitaphePitaphEpitaph 3.06810 Huy hiệu vàng33 Huy hiệu bạc43 Huy hiệu đồng10 gold badges33 silver badges43 bronze badges 0 Một tệp 5 giúp nhập khẩu dễ dàng. Khi có 5 có trong gói, chức năng 4 có thể được nhập từ tệp 5 như vậy: 6Tuy nhiên, không có nó, bạn không thể nhập trực tiếp. Bạn phải sửa đổi đường dẫn hệ thống: 7Đã trả lời ngày 25 tháng 5 năm 2019 lúc 2:42May 25, 2019 at 2:42
AlecalecAlec 7.5487 Huy hiệu vàng30 Huy hiệu bạc57 Huy hiệu Đồng7 gold badges30 silver badges57 bronze badges 0 Một điều __init__.py cho phép chuyển đổi một mô -đun thành một gói mà không phá vỡ API hoặc tạo không gian tên lồng nhau hoặc các mô -đun riêng*. Điều này giúp khi tôi muốn mở rộng một không gian tên. Nếu tôi có một tệp Util.py chứa 8sau đó người dùng sẽ truy cập 6 với 9Nếu sau đó tôi muốn thêm các chức năng tiện ích cho tương tác cơ sở dữ liệu và tôi muốn chúng có không gian tên riêng của chúng theo 7, tôi sẽ cần một thư mục mới ** và để giữ khả năng tương thích API (để 8 vẫn hoạt động), tôi sẽ Gọi nó là UTIL/. Tôi có thể chuyển Util.py vào Util/ Like SO, 0và trong Util/__ init__.py do 1Nhưng điều này là dư thừa. Thay vì có tệp UTIL/UTIL.PY, chúng ta chỉ có thể đặt nội dung Util.py vào __init__.py và người dùng có thể bây giờ có thể 2Tôi nghĩ rằng điều này nổi bật một cách độc đáo cách 7 của gói __init__.py hoạt động theo cách tương tự như mô -đun 7* Điều này được gợi ý trong các câu trả lời khác, nhưng tôi muốn làm nổi bật nó ở đây ** Không sử dụng thể dục dụng cụ nhập khẩu. Lưu ý rằng nó sẽ không hoạt động để tạo một gói mới có cùng tên với tệp, xem cái này Đã trả lời ngày 19 tháng 7 năm 2020 lúc 21:37Jul 19, 2020 at 21:37
Joeljoeljoel 5.4482 Huy hiệu vàng30 Huy hiệu bạc46 Huy hiệu Đồng2 gold badges30 silver badges46 bronze badges 2 Nếu bạn đang sử dụng Python 2 và muốn tải anh chị em của tệp của mình, bạn chỉ cần thêm thư mục chính của tệp vào đường dẫn hệ thống của bạn. Nó sẽ hoạt động giống như khi tệp hiện tại của bạn là một tệp init. 3Sau đó, nhập khẩu thường xuyên liên quan đến thư mục của tệp sẽ hoạt động tốt. Ví dụ. 4Mặc dù vậy, bạn muốn sử dụng tệp init.py thích hợp, nhưng khi xử lý mã di sản, bạn có thể bị mắc kẹt với F.EX. Một thư viện được mã hóa cứng để tải một tệp cụ thể và không có gì ngoài. Đối với những trường hợp đó là một thay thế.init.py file instead though, but when dealing with legacy code you might be stuck with f.ex. a library hard-coded to load a particular file and nothing but. For those cases this is an alternative. Đã trả lời ngày 14 tháng 7 lúc 13:24Jul 14 at 13:24
init.py: Đây là một tệp Python được tìm thấy trong thư mục gói, nó được gọi khi gói hoặc mô -đun trong gói được nhập. Bạn có thể sử dụng điều này để thực thi mã khởi tạo gói, tức là bất cứ khi nào gói được nhập, các câu lệnh Python được thực thi trước khi các mô -đun khác trong thư mục này được thực thi. Nó tương tự như chức năng chính của chương trình C hoặc Java nhưng điều này tồn tại trong mô -đun gói Python (thư mục) thay vì trong tệp Python cốt lõi. Ngoài ra, nó có quyền truy cập vào các biến toàn cầu được xác định trong tệp init.py này như khi mô -đun được nhập vào tệp Python..py : It is a python file found in a package directory, it is invoked when the package or a module in the package is imported. You can use this to execute package initialization code, i.e. whenever the package is imported the python statements are executed first before the other modules in this folder gets executed. It is similar to main function of c or java program but this exists in the python package module(folder) rather than in the core python file. also it has access to global variables defined in this init.py file as when the module is imported into python file. ví dụ như ví dụ. Tôi có một tệp init.py trong một thư mục có tên pymodlib, tệp này chứa các câu lệnh sau:init.py file in a folder called pymodlib, this file contains the following statements: in (f'invoking init.py cho {name} ') pystructure = [' for_loop ',' while__loop ',' ifcondition ']]]]init.py for {name}') pystructures = ['for_loop', 'while__loop', 'ifCondition'] Khi tôi nhập gói này "pymodlib" trong mô -đun giải pháp hoặc bảng điều khiển Python của giải pháp của tôi: hai câu lệnh này được thực thi trong khi nhập. Vì vậy, trong nhật ký hoặc bảng điều khiển, bạn sẽ thấy đầu ra sau:
Trong tuyên bố tiếp theo của bảng điều khiển Python: Tôi có thể truy cập biến toàn cầu:
['for_loop', 'trong khi__Loop', 'ifcondition']]] Bây giờ từ Python3.3 trở đi, việc sử dụng tệp này là tùy chọn để biến thư mục thành một mô -đun Python. Vì vậy, bạn bỏ qua từ bao gồm nó trong thư mục mô -đun Python. Đã trả lời ngày 4 tháng 4 lúc 18:35Apr 4 at 18:35
Mục đích của tệp __ init __ py tại thời điểm tạo các gói python là gì?Nếu một tệp có tên __init__.py có trong thư mục gói, nó sẽ được gọi khi gói hoặc mô -đun trong gói được nhập. Bạn có thể sử dụng điều này để thực hiện mã khởi tạo gói, ví dụ để khởi tạo dữ liệu cấp gói.to execute package initialization code, for example for the initialization of package-level data.
Việc sử dụng tệp __ init __ py trong một gói là gì ngay cả khi nó trống?Mục đích duy nhất của __init__.py là để chỉ ra rằng thư mục chứa tệp này là một gói và để coi thư mục này là gói, đó là lý do tại sao nó được khuyến nghị để trống.to indicate that the folder containing this file is a package, and to treat this folder as package, that's why it is recommended to leave it empty.
Mục đích của __ init __ py trong các thư mục dự án là gì?Tệp __init__.py cho phép trình thông dịch Python biết rằng một thư mục chứa mã cho mô -đun Python.Một tệp __init__.py có thể trống.Không có một, bạn không thể nhập các mô -đun từ một thư mục khác vào dự án của bạn.Vai trò của tệp __init__.py tương tự như hàm __init__ trong lớp Python.lets the Python interpreter know that a directory contains code for a Python module. An __init__.py file can be blank. Without one, you cannot import modules from another folder into your project. The role of the __init__.py file is similar to the __init__ function in a Python class.
Tôi đặt gì trong một tập tin init?Điều tối thiểu nhất cần làm là để lại tệp __init__.py hoàn toàn trống.Di chuyển một chút ra khỏi điều này, trong khi vẫn giữ mọi thứ đơn giản, bạn chỉ có thể sử dụng __init__.py để xác định đơn hàng nhập.Một bước khác trên phổ, bạn có thể sử dụng tệp __init__.py để xác định API của gói.determining import order. Another step up on the spectrum, you can use the __init__.py file to define the API of the package. |