电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

淺談Python __init__.py的作用

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

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

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

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

2. 簡化模塊導入操作

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

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

print('You have imported mypackage')

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

>>> import mypackageYou have imported mypackage

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

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’

報錯了。。。怎么回事?

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

from mypackage.subpackage_1 import test11

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

2.3 偷懶的導入方法

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

from mypackage import *

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

__all__ 關(guān)聯(lián)了一個模塊列表,當執(zhí)行 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

因此,導入操作會繼續(xù)查找 subpackage_1 和 subpackage_2 中的 __init__.py 并執(zhí)行。(但是此時不會執(zhí)行 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代碼文件。

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

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

標簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 脑钠肽-白介素4|白介素8试剂盒-研域(上海)化学试剂有限公司 | 金属软管_不锈钢金属软管_巩义市润达管道设备制造有限公司 | 等离子表面处理机-等离子表面活化机-真空等离子清洗机-深圳市东信高科自动化设备有限公司 | 内六角扳手「厂家」-温州市威豪五金工具有限公司 | 防火窗_耐火窗_防火门厂家_防火卷帘门-重庆三乐门业有限公司 | 粉末包装机,拆包机厂家,价格-上海强牛包装机械设备有限公司 | 武汉EPS线条_EPS装饰线条_EPS构件_湖北博欧EPS线条厂家 | 济南拼接屏_山东液晶拼接屏_济南LED显示屏—维康国际官网 | 七维官网-水性工业漆_轨道交通涂料_钢结构漆 | ICP备案查询_APP备案查询_小程序备案查询 - 备案巴巴 | 上海软件开发-上海软件公司-软件外包-企业软件定制开发公司-咏熠科技 | 注塑机-压铸机-塑料注塑机-卧式注塑机-高速注塑机-单缸注塑机厂家-广东联升精密智能装备科技有限公司 | 无线联网门锁|校园联网门锁|学校智能门锁|公租房智能门锁|保障房管理系统-KEENZY中科易安 | 中国在职研究生招生信息网 | 红外光谱仪维修_二手红外光谱仪_红外压片机_红外附件-天津博精仪器 | 干法制粒机_智能干法制粒机_张家港市开创机械制造有限公司 | 深圳3D打印服务-3D打印加工-手板模型加工厂-悟空打印坊 | 压滤机-洗沙泥浆处理-压泥机-山东创新华一环境工程有限公司 | 锌合金压铸-铝合金压铸厂-压铸模具-冷挤压-誉格精密压铸 | 釜溪印象网络 - Powered by Discuz!| 臻知网大型互动问答社区-你的问题将在这里得到解答!-无锡据风网络科技有限公司 | 检验科改造施工_DSA手术室净化_导管室装修_成都特殊科室建设厂家_医疗净化工程公司_四川华锐 | 西安中国国际旅行社(西安国旅) | 加气混凝土砌块设备,轻质砖设备,蒸养砖设备,新型墙体设备-河南省杜甫机械制造有限公司 | 青岛成人高考_山东成考报名网 | 办公室家具公司_办公家具品牌厂家_森拉堡办公家具【官网】 | 出国劳务公司_正规派遣公司[严海]| 玻璃钢罐_玻璃钢储罐_盐酸罐厂家-河北华盛节能设备有限公司 | 电表箱-浙江迈峰电力设备有限公司-电表箱专业制造商 | 不锈钢螺丝 - 六角螺丝厂家 - 不锈钢紧固件 - 万千紧固件--紧固件一站式采购 | 恒压供水控制柜|无负压|一体化泵站控制柜|PLC远程调试|MCGS触摸屏|自动控制方案-联致自控设备 | 磷酸肌酸二钠盐,肌酐磷酰氯-沾化欣瑞康生物科技 | 物流之家新闻网-最新物流新闻|物流资讯|物流政策|物流网-匡匡奈斯物流科技 | 辐射色度计-字符亮度测试-反射式膜厚仪-苏州瑞格谱光电科技有限公司 | 江西自考网| 电子万能试验机_液压拉力试验机_冲击疲劳试验机_材料试验机厂家-济南众标仪器设备有限公司 | 带压开孔_带压堵漏_带压封堵-菏泽金升管道工程有限公司 | 河北凯普威医疗器材有限公司,高档轮椅系列,推车系列,座厕椅系列,协步椅系列,拐扙系列,卫浴系列 | 陕西鹏展科技有限公司| 广州工业氧气-工业氩气-工业氮气-二氧化碳-广州市番禺区得力气体经营部 | 铝板冲孔网,不锈钢冲孔网,圆孔冲孔网板,鳄鱼嘴-鱼眼防滑板,盾构走道板-江拓数控冲孔网厂-河北江拓丝网有限公司 |