我對如何使用numpy的庫有問題。當我導入numpy時,我可以訪問許多內置的類,函數和常量,例如numpy.array,numpy.sqrt等。具有子模塊和功能的Python模塊
但是在numpy中還有其他子模塊,如numpy.testing。
這是如何完成的?在我有限的經驗中,帶有子模塊的模塊只是一個帶有init .py文件的文件夾,而帶有函數/類的模塊是實際的python文件。如何創建一個也有函數/類的模塊「文件夾」?
我對如何使用numpy的庫有問題。當我導入numpy時,我可以訪問許多內置的類,函數和常量,例如numpy.array,numpy.sqrt等。具有子模塊和功能的Python模塊
但是在numpy中還有其他子模塊,如numpy.testing。
這是如何完成的?在我有限的經驗中,帶有子模塊的模塊只是一個帶有init .py文件的文件夾,而帶有函數/類的模塊是實際的python文件。如何創建一個也有函數/類的模塊「文件夾」?
具有.py
文件和__init__.py
的文件夾被稱爲package
。其中一個包含類和函數的文件是module
。文件夾嵌套可以爲您提供子包。
因此,舉例來說,如果我有以下結構:
mypackage
__init__.py
module_a.py
module_b.py
mysubpackage
__init__.py
module_c.py
module_d.py
我可以導入mypackage.module_a
或mypackage.mysubpacakge.module_c
等。
您也可以通過將代碼放入__init__.py
中,將函數添加到mypackage
(如您提到的numpy函數)。雖然這通常被認爲是醜陋的。
如果你看看numpy's __init__.py
,你會看到很多代碼 - 其中很多是定義這些頂級類和函數。 __init__.py
代碼是加載包時首先執行的代碼。
那麼它是如何導入類似numpy或scipy的庫,並且包含類/函數(如模塊)和其他模塊(如包)。 所以我可以做numpy.array(一個類)或numpy.testing.assert ...(獲取一個模塊)。 – ImpGuard
我剛剛回答說,它都在'__init __。py'中。當解釋器加載該包時,其中的任何函數都會有該包的頭等成員。 –
啊,這就是我想知道的。我認爲這會被認爲是醜陋的,因爲很多雜項。邏輯會進去。我認爲所有的東西都是單獨編碼的,不知何故合併成__init__.py之後? 有這樣的東西似乎相當有用,但我不知道如何複製它,而不只是在一個文件中轉儲大量的代碼。 – ImpGuard