成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

淺談Python __init__.py的作用

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

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

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

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

2. 簡化模塊導(dǎo)入操作

假設(shè)我們的模塊包的目錄結(jié)構(gòu)如下:

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

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

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

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

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

2.1 __init__.py 是怎么工作的?

實(shí)際上,如果目錄中包含了 __init__.py 時,當(dāng)用 import 導(dǎo)入該目錄時,會執(zhí)行 __init__.py 里面的代碼。

我們在mypackage目錄下增加一個 __init__.py 文件來做一個實(shí)驗(yàn):

.└── 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,如果執(zhí)行了該文件就會輸出:

print('You have imported mypackage')

下面直接用交互模式進(jìn)行 import

>>> import mypackageYou have imported mypackage

很顯然,__init__.py 在包被導(dǎo)入時會被執(zhí)行。

2.2 控制模塊導(dǎo)入

我們再做一個實(shí)驗(yàn),在 mypackage/__init__.py 添加以下語句:

from subpackage_1 import test11

我們導(dǎo)入 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’

報錯了。。。怎么回事?

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

from mypackage.subpackage_1 import test11

綜上,我們可以在__init__.py 指定默認(rèn)需要導(dǎo)入的模塊

2.3 偷懶的導(dǎo)入方法

有時候我們在做導(dǎo)入時會偷懶,將包中的所有內(nèi)容導(dǎo)入

from mypackage import *

這是怎么實(shí)現(xiàn)的呢? __all__ 變量就是干這個工作的。

__all__ 關(guān)聯(lián)了一個模塊列表,當(dāng)執(zhí)行 from xx import * 時,就會導(dǎo)入列表中的模塊。我們將 __init__.py 修改為 。

__all__ = [’subpackage_1’, ’subpackage_2’]

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

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

子目錄的中的模塊沒有導(dǎo)入!!!

該例子中的導(dǎo)入等價于

from mypackage import subpackage_1, subpackage_2

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

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

__all__ = [’test11’, ’test12’]# 默認(rèn)只導(dǎo)入test11from mypackage.subpackage_1 import test11

再來導(dǎo)入試試

>>> 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’]

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

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

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

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

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

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

標(biāo)簽: Python 編程
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
黑人巨大精品欧美黑白配亚洲| 久久―日本道色综合久久| 日韩欧美成人一区二区| 精品在线免费观看| 久久综合九色| 午夜一区二区三区视频| 日韩亚洲在线| 综合久久综合久久| 国语自产精品视频在线看抢先版结局| 精品久久久久久亚洲综合网| 国产一区二区精品久久99| 欧美日韩在线综合| 九九久久精品视频| 色综合激情久久| 亚洲精品福利视频网站| 夜夜嗨一区二区三区| 亚洲美女一区二区三区| 亚洲精华国产欧美| 亚洲欧美国产高清| 91久久黄色| 一区二区三区精品在线观看| 国产欧美二区| 洋洋成人永久网站入口| 欧美亚洲网站| 日本中文字幕一区二区视频 | 99在线精品视频在线观看| 国产精品日韩精品欧美在线| 欧美激情综合| 亚洲女同女同女同女同女同69| 亚洲视频大全| 丝袜a∨在线一区二区三区不卡| 久久男女视频| 麻豆久久久久久久| 欧美一区二区三区系列电影| 不卡的电影网站| 欧美激情一区不卡| 一区久久精品| 一区二区高清在线| 91福利在线观看| 国产成人精品aa毛片| 亚洲精品在线网站| 好看的亚洲午夜视频在线| 亚洲精品成人精品456| 蜜桃av综合| 狠狠色丁香久久婷婷综合_中| 欧美sm极限捆绑bd| 欧美在线日韩精品| 亚洲欧洲日韩在线| 久久久久久黄| 国产精品99久久久久久有的能看| 久久久久高清精品| 精品91久久久久| 日日摸夜夜添夜夜添精品视频 | 国产日产欧美精品一区二区三区| 亚洲视频狠狠| 亚洲成人中文在线| 777午夜精品视频在线播放| 97久久精品人人爽人人爽蜜臀| 亚洲欧美日韩一区二区| 欧美性极品少妇| 99国产精品久| 亚洲国产另类精品专区| 欧美妇女性影城| 欧美午夜影院| 天堂久久久久va久久久久| 欧美一区二区三区四区五区| 99综合影院在线| 一片黄亚洲嫩模| 欧美在线播放高清精品| 99精品欧美一区二区三区综合在线| 亚洲欧美另类在线| 欧美中文一区二区三区| 91麻豆精品一区二区三区| 亚洲一线二线三线久久久| 欧美军同video69gay| 欧美久久综合| 亚洲成人激情社区| 日韩一区二区在线看| 亚洲欧洲精品一区二区三区波多野1战4| 日韩精品福利网| 久久久久久久久久久久久久久99| 国产欧美69| 国产乱码精品1区2区3区| 国产精品久久久久久久久晋中 | 日韩国产精品91| www国产精品av| 性娇小13――14欧美| 日韩影院精彩在线| 久久久国产综合精品女国产盗摄| 久久精品五月| 欧美伊人影院| 麻豆精品视频在线| 国产三级一区二区| 欧美在线一二三| 亚洲国产婷婷| 国产一区二区福利视频| 国产精品乱码久久久久久| 欧美伊人精品成人久久综合97 | 国产精品乱人伦| 在线亚洲高清视频| 国产中文一区| 国产伦精一区二区三区| 一区二区三区在线播放| 精品免费国产二区三区| 色综合久久99| 国产精品mm| 国产精品 日产精品 欧美精品| 一区二区三区欧美| 精品福利一二区| 在线观看国产日韩| 一区二区精品国产| 99精品视频在线免费观看| 人人精品人人爱| 亚洲日本在线观看| 欧美tickling网站挠脚心| 日本精品一级二级| 亚洲激情精品| 99re8在线精品视频免费播放| 蜜桃视频在线观看一区二区| 一区在线观看视频| 精品欧美乱码久久久久久1区2区| 美女日韩在线中文字幕| 欧美日韩成人| 成人免费视频app| 美国av一区二区| 一区二区三区免费在线观看| 久久亚洲精品国产精品紫薇| 欧美日韩不卡视频| 一本久道中文字幕精品亚洲嫩| 欧美日韩精品不卡| 成人免费视频免费观看| 美腿丝袜亚洲综合| 亚洲综合一二三区| 亚洲欧洲精品一区二区三区不卡 | 亚洲免费婷婷| 极品日韩久久| 91色综合久久久久婷婷| 久久 天天综合| 日韩国产欧美一区二区三区| 一区二区成人在线视频| 国产精品久久免费看| 久久精品免视看| 欧美影院午夜播放| 亚洲男女自偷自拍| 亚洲精品欧洲精品| 亚洲一二三区在线| 欧美一区亚洲二区| 东方aⅴ免费观看久久av| 韩国在线一区二区| 免费观看久久久4p| 亚洲精品免费在线观看| 亚洲国产精品成人综合色在线婷婷| 精品久久久久久无| 欧美一区二区三区视频| 欧美日韩高清一区二区不卡| 欧美色综合网站| 在线观看欧美黄色| 国产久一道中文一区| 国产精品播放| 欧美日韩亚洲在线| 99re在线精品| 本田岬高潮一区二区三区| 国产91精品一区二区| 国产.精品.日韩.另类.中文.在线.播放| 精品一区二区三区影院在线午夜 | 欧美日韩少妇| 欧美人与禽性xxxxx杂性| 欧美在线高清| 欧美黄色一级视频| 欧美成人一品| 欧美日韩一区二区三区在线观看免 | 中文一区二区在线观看| 久久久国产精华| 久久精品在线免费观看| 久久久久久日产精品| 久久精品这里都是精品| 国产无人区一区二区三区| 国产亚洲人成网站| 国产女主播视频一区二区| 久久这里只精品最新地址| 久久亚洲捆绑美女| 日韩免费性生活视频播放| 欧美一区二区三区免费视频| 777午夜精品视频在线播放| 欧美一级爆毛片| 久久先锋影音av鲁色资源网| 久久久99久久| 中文字幕日韩一区二区| 亚洲欧美一区二区在线观看| 亚洲美女免费视频| 亚洲自拍与偷拍| 日韩国产精品91| 免费在线观看日韩欧美| 国产精品小仙女| av一本久道久久综合久久鬼色| 91欧美激情一区二区三区成人| 99久久精品国产一区二区三区| 欧美喷水视频| 国产亚洲欧洲| 欧洲另类一二三四区|