日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

淺談Python __init__.py的作用

瀏覽:182日期:2022-07-06 18:41:30

我們經常在python的模塊目錄中會看到 '__init__.py' 這個文件,那么它到底有什么作用呢?

1. 標識該目錄是一個python的模塊包(module package)

如果你是使用python的相關IDE來進行開發,那么如果目錄中存在該文件,該目錄就會被識別為 module package 。

2. 簡化模塊導入操作

假設我們的模塊包的目錄結構如下:

.└── mypackage ├── subpackage_1 │ ├── test11.py │ └── test12.py ├── subpackage_2 │ ├── test21.py │ └── test22.py └── subpackage_3 ├── test31.py └── test32.py

如果我們使用最直接的導入方式,將整個文件拷貝到工程目錄下,然后直接導入:

from mypackage.subpackage_1 import test11from mypackage.subpackage_1 import test12from mypackage.subpackage_2 import test21from mypackage.subpackage_2 import test22from mypackage.subpackage_3 import test31from mypackage.subpackage_3 import test32

當然這個例子里面文件比較少,如果模塊比較大,目錄比較深的話,可能自己都記不清該如何導入。(很有可能,哪怕只想導入一個模塊都要在目錄中找很久)

這種情況下,__init__.py 就很有作用了。我們先來看看該文件是如何工作的。

2.1 __init__.py 是怎么工作的?

實際上,如果目錄中包含了 __init__.py 時,當用 import 導入該目錄時,會執行 __init__.py 里面的代碼。

我們在mypackage目錄下增加一個 __init__.py 文件來做一個實驗:

.└── mypackage ├── __init__.py ├── subpackage_1 │ ├── test11.py │ └── test12.py ├── subpackage_2 │ ├── test21.py │ └── test22.py └── subpackage_3 ├── test31.py └── test32.py

mypackage/__init__.py 里面加一個print,如果執行了該文件就會輸出:

print('You have imported mypackage')

下面直接用交互模式進行 import

>>> import mypackageYou have imported mypackage

很顯然,__init__.py 在包被導入時會被執行。

2.2 控制模塊導入

我們再做一個實驗,在 mypackage/__init__.py 添加以下語句:

from subpackage_1 import test11

我們導入 mypackage 試試:

>>> import mypackageTraceback (most recent call last): File '<stdin>', line 1, in <module> File '/home/taopeng/Workspace/Test/mypackage/__init__.py', line 2, in <module> from subpackage_1 import test11ImportError: No module named ’subpackage_1’

報錯了。。。怎么回事?

原來,在我們執行import時,當前目錄是不會變的(就算是執行子目錄的文件),還是需要完整的包名。

from mypackage.subpackage_1 import test11

綜上,我們可以在__init__.py 指定默認需要導入的模塊

2.3 偷懶的導入方法

有時候我們在做導入時會偷懶,將包中的所有內容導入

from mypackage import *

這是怎么實現的呢? __all__ 變量就是干這個工作的。

__all__ 關聯了一個模塊列表,當執行 from xx import * 時,就會導入列表中的模塊。我們將 __init__.py 修改為 。

__all__ = [’subpackage_1’, ’subpackage_2’]

這里沒有包含 subpackage_3,是為了證明 __all__ 起作用了,而不是導入了所有子目錄。

>>> from mypackage import *>>> dir()[’__builtins__’, ’__doc__’, ’__loader__’, ’__name__’, ’__package__’, ’__spec__’, ’subpackage_1’, ’subpackage_2’]>>> >>> dir(subpackage_1)[’__doc__’, ’__loader__’, ’__name__’, ’__package__’, ’__path__’, ’__spec__’]

子目錄的中的模塊沒有導入!!!

該例子中的導入等價于

from mypackage import subpackage_1, subpackage_2

因此,導入操作會繼續查找 subpackage_1 和 subpackage_2 中的 __init__.py 并執行。(但是此時不會執行 import *)

我們在 subpackage_1 下添加 __init__.py 文件:

__all__ = [’test11’, ’test12’]# 默認只導入test11from mypackage.subpackage_1 import test11

再來導入試試

>>> from mypackage import *>>> dir()[’__builtins__’, ’__doc__’, ’__loader__’, ’__name__’, ’__package__’, ’__spec__’, ’subpackage_1’, ’subpackage_2’]>>> >>> dir(subpackage_1)[’__all__’, ’__builtins__’, ’__cached__’, ’__doc__’, ’__file__’, ’__loader__’, ’__name__’, ’__package__’, ’__path__’, ’__spec__’, ’test11’]

如果想要導入子包的所有模塊,則需要更精確指定。

>>> from mypackage.subpackage_1 import *>>> dir()[’__builtins__’, ’__doc__’, ’__loader__’, ’__name__’, ’__package__’, ’__spec__’, ’test11’, ’test12’]

3. 配置模塊的初始化操作

在了解了 __init__.py 的工作原理后,應該能理解該文件就是一個正常的python代碼文件。

因此可以將初始化代碼放入該文件中。

到此這篇關于淺談Python __init__.py的作用的文章就介紹到這了,更多相關Python __init__.py內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
人在线成免费视频| 国产精品mm| 午夜久久av| 婷婷色综合网| 久久国产精品成人免费观看的软件| 精品欠久久久中文字幕加勒比| 欧美中文一区| 欧美日韩午夜| 精品深夜福利视频| 国产精品mm| 精品视频网站| 97精品中文字幕| 久久视频国产| 亚洲精品网址| 免费在线视频一区| 亚洲美女91| 国产亚洲欧美日韩精品一区二区三区 | 四虎成人精品一区二区免费网站| 久久国产精品久久久久久电车| 三级在线观看一区二区| 亚洲精品一级二级三级| 欧美天堂一区| 国产欧美日韩精品高清二区综合区 | 9国产精品视频| 男女精品网站| 国产欧美一区二区色老头| 国产成人免费av一区二区午夜| 国产成人免费av一区二区午夜| 色爱综合av| 视频一区中文字幕国产| 国产精品对白| 亚洲精品**中文毛片| 亚洲深爱激情| 中文在线а√在线8| 日韩精品一卡二卡三卡四卡无卡| 亚洲精品看片| 麻豆91在线播放| 99精品视频在线| 四虎国产精品免费久久| 欧美激情综合| 久久亚洲风情| 国产欧美一区二区三区精品酒店| 国产婷婷精品| 日韩黄色大片| 日本午夜精品一区二区三区电影| 一区二区精品伦理...| 久久国产精品亚洲77777| 麻豆91精品视频| 视频一区二区三区入口| 国产精品字幕| 精品欧美日韩精品| 亚洲欧洲专区| 亚洲精品91| 日韩精品专区| 国产伦精品一区二区三区视频 | 国产精品7m凸凹视频分类| 亚洲一区欧美| 美女网站一区| 日韩欧美网址| 国产一区二区三区日韩精品 | 日韩精品欧美| 美女精品久久| 亚洲制服欧美另类| 国产精品美女| 国产精品色网| 亚洲一区免费| 国产视频一区三区| 婷婷激情久久| 国产99亚洲| 日本午夜大片a在线观看| 国产精品久久久久久妇女| 日本精品一区二区三区在线观看视频| 不卡中文字幕| 免费看的黄色欧美网站| 日韩中文字幕不卡| 亚洲日本国产| 国产日产精品一区二区三区四区的观看方式| 亚洲乱码久久| 日本91福利区| 国产欧美一区二区三区精品观看| 人人精品久久| 狠狠久久伊人| 99tv成人| 亚洲视频国产精品| 最新亚洲国产| 国产精品第一| 欧美成人基地| 欧美日韩少妇| 欧美亚洲一级| 久久久五月天| 亚洲欧洲美洲国产香蕉| 国产精品2023| 99成人超碰| 91大神在线观看线路一区| 久久久91麻豆精品国产一区| se01亚洲视频 | 欧美日韩国产精品一区二区亚洲| 免费日韩av片| 欧美极品中文字幕| 欧美成人精品| 老牛国内精品亚洲成av人片| 欧美粗暴jizz性欧美20| 国产精品一区二区三区美女| 国产一区久久| 国产精品99久久免费| 91精品亚洲| 亚洲婷婷丁香| 中文另类视频| 国产精品mm| 日韩在线一二三区| 久久网站免费观看| 国产精品久久| 国产字幕视频一区二区| 美女毛片一区二区三区四区最新中文字幕亚洲| 日本精品影院| 精品欧美视频| 国产精品成人自拍| 亚洲精品四区| 欧美成人久久| 久久久国产精品一区二区中文| 国产精品亚洲二区| 影音先锋久久| 神马午夜在线视频| 里番精品3d一二三区| 欧美日韩伊人| 少妇精品久久久一区二区| 91精品91| 婷婷成人在线| 日韩综合精品| 在线天堂中文资源最新版| 美女视频黄免费的久久| 国产精品久久免费视频| 在线精品视频一区| 亚洲网址在线观看| 美女精品在线| 亚洲欧美日本视频在线观看| 久久久成人网| 日韩av首页| 色老板在线视频一区二区| 另类中文字幕国产精品| 日韩精品一区二区三区免费观影| 日韩在线二区| 99在线观看免费视频精品观看| av一区二区高清| 夜夜精品视频| 人人爱人人干婷婷丁香亚洲| 清纯唯美亚洲综合一区| 欧美激情视频一区二区三区在线播放| 国产调教精品| 福利欧美精品在线| 九一成人免费视频| 99国产精品私拍| 日韩欧美三区| 国产精品探花在线观看| 色爱综合网欧美| 日韩久久视频| 中文一区一区三区免费在线观| 91成人在线| 亚洲精品88| 日韩一区精品视频| 欧美精品第一区| 久久中文字幕二区| 日韩精品欧美成人高清一区二区| 久久尤物视频| 99xxxx成人网| 国产一区二区三区四区| 九色porny丨国产首页在线| 亚洲欧洲一区| 高清在线一区| 免费一区二区视频| 国产精品99一区二区三区| 亚洲一区黄色| 色综合狠狠操| 欧美在线观看天堂一区二区三区| 久久天堂精品| 国产精品久久久久久久久久久久久久久| 蜜桃av在线播放| 国产乱码精品一区二区三区亚洲人| 欧洲激情综合| 中文字幕成在线观看| 国产亚洲精品精品国产亚洲综合 | 亚洲成人不卡| 日本va欧美va精品发布| 亚洲精品2区| 97se综合| 精品免费在线| 精品国产三区在线| 日韩区欧美区| 鲁大师成人一区二区三区| 高清不卡亚洲| 日本一区二区免费高清| 国产日韩亚洲| 欧美日韩精品一区二区三区在线观看| 国产一区白浆| 久久高清免费| 欧美一区二区性| 999久久久免费精品国产| av在线最新| 日韩啪啪电影网| 91精品xxx在线观看|