天天看點

如何優雅的建立__init__.py檔案?

如何優雅的建立__init__.py檔案?

點選關注我哦

如何優雅的建立__init__.py檔案?
如何優雅的建立__init__.py檔案?

一篇文章帶你了解如何優雅的建立__init__.py檔案

什麼是 Python 包?

《資料科學家的子產品化程式設計指南》文章中,我們介紹了:Python 包隻是一個有組織的 Python 子產品集合,而 Python 子產品隻是一個單獨的 Python 檔案。

為什麼我要使用__init__.py?

使用 _init _. py 建立一個軟體包就是為了讓開發更大的 Python 項目變得更容易。它提供了一種機制,可以将單獨的 python 腳本分組到單個可導入子產品中。

讓我們來看一些例子

了解為什麼要使用__init__.py并且學習如何使用它來建立一個包的最好方法是通過一些快速的例子運作!最好的學習方法就是實踐!

本教程中的代碼應該适用于 Python 3。

假設我們建立了三個子產品:

someFolder|-- stringLength.py|-- stringToUpper.py`-- stringToLower.py
           

記住,子產品隻是任何單個 python 檔案的另一個名稱

對于我們的例子,這些檔案的内容如下:

# stringLength.py
def stringLength(inStr):    return len(inStr)
           
# stringToUpper.py
def stringToUpper(inStr):    return inStr.upper()
           
# stringToLower.py
def stringToLower(inStr):    return inStr.lower()
           

顯然,這些函數是無用的,但是作為一個基本概念的模型是有幫助的,我們已經編寫了一些以某種方式相關的 python 子產品。

那麼,如果不建立一個包并使用 _init _. py,我們如何使用這些檔案中的函數呢?

我們隻能導入這些檔案,如果它們位于我們正在運作的腳本所在的工作目錄中。

我們可以在一個新的 Python 腳本中使用這些檔案,但有一個關鍵的警告:

The files must be in the same directory as the script we are trying to use them in. 

為了說明這一點,讓我們建立一個名為 example1.py 的檔案,它利用了我們的子產品:

# example1.py
import stringLengthimport stringToLowerimport stringToUpper
some_string = "Hello, Universe!"
print(stringLength.stringLength(some_string))print(stringToLower.stringToLower(some_string))print(stringToUpper.stringToUpper(some_string))
           

添加一個空白__init__.py

如果我們想要将這些腳本分離到一個檔案夾中,以使它們更有組織性,那會怎麼樣呢?

這就是 __init__. py檔案發揮作用的地方。

首先,讓我們将腳本移動到一個新的子檔案夾中,并将其命名為 string _func。然後在該檔案夾中建立一個名為__init__.py 的空檔案。

下面是我們新的檔案/檔案夾結構:

someFolder|-- string_func|   |-- __init__.py|   |-- stringToUpper.py|   |-- stringToLower.py|   `-- strengthLength.py`-- example1.py
           

是以,現在讓我們測試一下__init__. py到底允許我們做什麼:

讓我們建立一個新的 example2.py 檔案。

# example2.py
import string_func.stringLengthimport string_func.stringToLowerimport string_func.stringToUpper
some_string = "Hello, Universe!"
print(string_func.stringLength.stringLength(some_string))print(string_func.stringToLower.stringToLower(some_string))print(string_func.stringToUpper.stringToUpper(some_string))
           

現在,我們可以以這種方式通路字元串函數。這很好,因為它們都在一個獨立的檔案夾中,但文法肯定不是很簡潔。讓我們看看我們是否可以通過編輯 __init__. py來改善一下。

将import 加入到__init__.py中

打開你的__init__.py檔案并做以下更改:

# __init__.pyfrom .stringLength import stringLengthfrom .stringToLower import stringToLowerfrom .stringToUpper import stringToUpper
           

是以,在我們的__init__.py中,我們現在可以将代碼縮短為:

# example3.py
import string_func
some_string = "Hello, Universe!"
print(string_func.stringLength(some_string))print(string_func.stringToLower(some_string))print(string_func.stringToUpper(some_string))
           

現在文法變得更簡潔了,你可以看到 string _ func 調用函數就像它使用自己的子產品一樣。

是以,這基本上就是__init__.py的功勞!它允許您将目錄當作 python 子產品來處理。然後可以在__init__.py檔案中進一步定義和導入,或者也可以将該檔案保留為空白。

調試import問題

對于調試import的問題,一般有三個基本的技巧:

    1. 使用互動式解釋器(REPL)導入子產品,并檢視是否得到了所期望的結果;

    2. 使用 python -v -m my _ scriptname.py 啟動腳本,然後檢查輸出,确切檢視從哪裡導入子產品;

    3. 使用 Pycharm。Pycharm 神奇的内省能力意味着您将立即知道您的子產品是否被正确導入,因為如果沒有導入,它将表明一個錯誤。它有時也會建議進行适當的修正。社群版是免費的,如果你是一個學生,你可以免費訂閱他們的所有産品!

·  END  ·

HAPPY LIFE

如何優雅的建立__init__.py檔案?