<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在Python工程中,我們經常可以看到帶有“__init__.py”檔案的目錄,在PyCharm中,帶有這個檔案的目錄被認為是Python的包目錄,與目錄的圖示有不一樣的顯示。如下圖所示, dir_example是一個空白目錄,圖示是個資料夾圖示,而init_example下有_init__.py檔案,其圖示是一個包。
那麼這個檔案的作用是什麼,我們平時如何使用呢?
Python 定義了兩種型別的包,常規包和名稱空間包。常規包是傳統的包,因為它們存在於 Python 3.2 和更早的版本中。一個常規包通常被實現為一個包含__init__.py 檔案的目錄。當一個常規包被匯入時,這個__init__.py檔案被隱式執行,它所定義的物件被繫結到包的名稱空間中。
這是Python官方檔案中對__init__.py檔案的描述,其實它的意思很簡單,就是說Python檔案都是按照目錄當作不同的模組來組織的,這個目錄被認為是Python包目錄,Python會通過搜尋該目錄下的檔案來匯入相關的模組。但是並不是所有的目錄都會被搜尋新增,只有當目錄中包含__init__.py檔案時,這個目錄才會被Python當作是一個包目錄,進而搜尋新增裡面的檔案。這樣做可以讓程式設計者自己控制哪些目錄可以被Python匯入成包。
當某個目錄中包含__init__.py檔案時,Python在引入這個模組之前,會首先執行這個檔案。因此,這個檔案也可以被程式設計者用來控制定義包級別的變數。
綜上所述,__init__.py檔案最主要的作用是2個:
當目錄下包含這個檔案時,Python會將其當作成包目錄,進而可以使用import xx.xx的方式匯入目錄下的檔案或者模組。
使用__init__.py檔案可以控制模組匯入時的變數和內容,便於程式設計者的控制。
下面我們看幾個例子即可。
看版本,在較低的版本中(如3.2及以下),沒有__init__.py檔案的目錄不能使用import xx.xx匯入相關模組,但是後面的版本可以。
例如,我們有如下的目錄結構:
init_example/ a_pkg/
__init__.py
a.py
init_test.py
即init_example工程下有個init_test.py檔案和a_pkg目錄,a_pkg目錄下有__init__.py檔案和一個a.py檔案。
我們在a_pkg目錄下的__init__.py檔案定義:
print("Hey, I am a __init__.py file")
那麼,如果我們在init_test.py中內容如下:
from a_pkg import *
執行init_test.py我們可以得到如下結果:
Hey, I am a __init__.py file
因為在from a_pkg import *時候,會首先執行a_pkg目錄下的__init__.py檔案。
還是上面的目錄,假如我們在a_pkg目錄下的a.py定義如下內容:
def a_method(): print("I am a_pkg!")
在a_pkg目錄下的__init__.py檔案定義:
from a_pkg.a import a_method
那麼,我們在init_test.py中引入a_pkg可以直接引入a_method方法:
from init_example.a_pkg import a_method a_method()
會列印如下內容:
I am a_pkg!
__all__方法可以在__init__.py檔案定義一些包或者變數,可以在使用
from init_example.a_pkg import *
時定義*表達的內容。
例如還是上面的內容,但是我們在a_pkg目錄下的__init__.py檔案定義:
__all__ = ["a"]
那麼,我們在init_test.py中使用下面的語句可以引入a模組:
from a_pkg import * a.a_method()
這時候依然會列印如下內容:
I am a_pkg!
到此這篇關於Python包中__init__.py檔案的作用與用法的文章就介紹到這了,更多相關Python包__init__.py檔案用法內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45