日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python的init有什么用_Python中 __init__.py的作用

發布時間:2025/3/20 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python的init有什么用_Python中 __init__.py的作用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們經常在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 test11

from mypackage.subpackage_1 import test12

from mypackage.subpackage_2 import test21

from mypackage.subpackage_2 import test22

from mypackage.subpackage_3 import test31

from 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 mypackage

You have imported mypackage

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

2.2? 控制模塊導入

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

from subpackage_1 import test11

我們導入 mypackage 試試:

>>> import mypackage

Traceback (most recent call last):

File "", line 1, in

File "/home/taopeng/Workspace/Test/mypackage/__init__.py", line 2, in

from subpackage_1 import test11

ImportError: 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']

# 默認只導入test11

from 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有什么用_Python中 __init__.py的作用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人免费黄色大片v266 | 在线一区 | 色视频在线播放 | 人妻熟妇又伦精品视频a | 免费三片在线观看网站v888 | 亚洲伦理精品 | xxx色| 成人av动漫在线观看 | 草碰在线 | 影音先锋亚洲天堂 | 亚洲精品免费在线 | 男男av网站 | av福利在线看 | 亚洲人视频在线 | 宅男午夜影院 | 久久精品一区二区三区黑人印度 | 在线激情网 | www.亚洲国产 | 男女搞网站 | 精品无码人妻一区二区三区 | 亚洲国产精品国自产拍av | 亚洲一区和二区 | 国产高清在线视频 | 亚洲第一国产视频 | 丰满少妇中文字幕 | 自拍视频一区 | 国产精品二区在线 | 久久精品视频2 | 男人的天堂久久 | 蜜桃av噜噜一区二区三区小说 | ,午夜性刺激免费看视频 | 日韩成人av片 | 开心色站 | 小黄网站在线观看 | 歪歪视频在线观看 | 一区二区色 | 成人av在线网址 | 中文字幕亚洲在线观看 | 最近最新中文字幕 | 上床视频在线观看 | 热の国产| 激情一区二区三区 | 日本精品一区二区视频 | 国产精品麻豆视频 | 伊人资源网 | 精品视频一区二区 | 欧美乱码精品 | 中文字幕麻豆 | 波多野结衣视频在线看 | 日本妈妈3 | 久草精品在线观看 | 久操免费视频 | 日韩欧美精品免费 | 日本少妇ⅹxxxxx视频 | 你懂的在线视频网站 | 性活交片大全免费看 | 91嫩草视频在线观看 | 国产精品久久久久永久免费看 | 成人免费福利 | a久久久久久 | 超碰超碰在线 | 男人的天堂2018| 日韩少妇内射免费播放18禁裸乳 | 波多野结衣电车 | 素人fc2av清纯18岁 | 欧美激情一二区 | 国产1区2区3区4区 | 日韩欧美综合久久 | 日本www高清视频 | 一进一出好爽视频 | 日本国产欧美 | 亚洲做受高潮无遮挡 | 一级肉体全黄裸片 | 怡红院一区 | 亚洲欧美国产一区二区 | 在线观看一级片 | 亚洲免费视频一区二区 | 蜜桃成人无码区免费视频网站 | 91中文字幕在线播放 | 久久极品视频 | 国产一区二区欧美 | 国产手机精品视频 | 国产成人精品一二三区 | 国产 欧美 日韩 | 久久性色| 久热中文字幕在线 | 亚洲av人人夜夜澡人人 | 黄色av一区二区 | 人人九九精品 | www.伊人 | 欧美一区二区三区久久综合 | 亚洲自拍电影 | 国产又粗又大又硬 | 欧美老熟妇又粗又大 | 久热色| 亚洲最大在线视频 | 色资源av| 男女黄色又爽大片 | 巨乳美女动漫 |