python的initpy
『壹』 python中含__init__.py 的文件才會被認作是一個包,為什麼呢,這個文件有什麼作用呢
1、__init__.py是Python中package的標識
__init__.py 文件的一個主要作用是將文件夾變為一個Python模塊,Python 中的每個模塊的包中,都有__init__.py 文件
2、批量引入(定義__all__用來模糊導入)
我們在python中導入一個包時,實際上是導入了它的__init__.py文件,這樣我們可以在__init__.py文件中批量導入我們所需要的模塊,而不再需要一個一個的導入。
3、配置模塊的初始化操作,這個文件也是一個正常的python代碼文件,因此可以將初始化代碼放入該文件中。
(1)python的initpy擴展閱讀
python中__init__.py文件的作用實例:
python的每個模塊的包中,都有一個__init__.py文件,有了這個文件,我們才能導入這個目錄下的mole。__init__.py裡面還是可以有內容的,我們在導入一個包時,實際上導入了它的__init__.py文件。
我們可以再__init__.py文件中再導入其他的包,或者模塊。
[python]
import readers
import writers
import commands
import users
import meta
import auth
import admin
這樣,當我們導入這個包的時候,__init__.py文件自動運行。幫我們導入了這么多個模塊,我們就不需要將所有的import語句寫在一個文件里了,也可以減少代碼量。不需要一個個去導入mole了。
『貳』 python腳本下面的 __init__.py 有什麼作用
The __init__.py files are required to make Python treat the directories as containing packages; this is done to prevent directories with a common name, such as string, from unintentionally hiding valid moles that occur later on the mole search path. In the simplest case, __init__.py can just be an empty file, but it can also execute initialization code for the package or set the __all__variable, described later.
在文件夾中包含一個__init__.py,Python就會把文件夾當作一個package,裡面的py文件就能夠在外面被import了。
例如文件夾結構是:
sound/ Top-level package
__init__.py Initialize the sound package
formats/ Subpackage for file format conversions
__init__.py
wavread.py
wavwrite.py
aiffread.py
aiffwrite.py
auread.py
auwrite.py
...
effects/ Subpackage for sound effects
__init__.py
echo.py
surround.py
reverse.py
...
filters/ Subpackage for filters
__init__.py
equalizer.py
vocoder.py
karaoke.py
外部就可以import sound.effects.echo來使用,sound文件夾和effects文件夾都被處理成package了。
『叄』 python 為什麼 都有個__int__.py
一般python只要是文件夾中就都會帶一個__init__.py 但不強求
這個文件可以說是程序的入口 在外部導入這個包(也就是這個文件夾)的時候 一定要這個文件才能import 不然就會比較麻煩
所以這個包要被別人的調用的時候最好帶上這個__init__.py 不然會讓掉你程序的人頭疼
如果只是自己寫的腳本 其實帶不帶也沒太大影響
『肆』 python中setup.py和_init_.py的作用
_init_.py,是要想讓一個文件夾成為包的必須的文件!這個文件可以為空,但是必須得有!
setup.py,是用來安裝模塊用的,dos命令下!
『伍』 Python中的init.py有什麼作用
你指的應該是是__init__.py文件,以下下詳細解釋:
__init__.py該文件的作用就是相當於把自身整個文件夾當作一個包來管理,每當有外部import的時候,就會自動執行裡面的函數。
它具有以下幾個作用:
1. 標識該目錄是一個python的模塊包(mole package)
如果你是使用python的相關IDE來進行開發,那麼如果目錄中存在該文件,該目錄就會被識別為 mole 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.1init.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 mypackageTraceback (most recent call last):
File "<stdin>", line 1, in <mole>
File "/home/taopeng/Workspace/Test/mypackage/__init__.py", line 2, in <mole>
from subpackage_1 import test11ImportError: No mole 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__.py,這個有什麼作用
__init__.py的作用有如下幾點:
1. 相當於class中的def __init__(self):函數,用來初始化模塊。
2. 把所在目錄當作一個package處理
3. from-import 語句導入子包時需要用到它。 如果沒有用到, 他們可以是空文件。
如引入package.mole下的所有模塊
from package.mole import *
這樣的語句會導入哪些文件取決於操作系統的文件系統. 所以我們在__init__.py 中加入 __all__變數.
該變數包含執行這樣的語句時應該導入的模塊的名字. 它由一個模塊名字元串列表組成.
『柒』 python裡面 init的用法
打少了一個下劃線,應該是__init__,如果寫成_init_,則在建立對象時不會得到調用,也就不能初始化hungry.
『捌』 python3.3中_init_的用法
__init__方法在類的一個對象被建立時,馬上運行。這個方法可以用來對你的對象做一些你希望的 初始化 。注意,這個名稱的開始和結尾都是雙下劃線。
def __init__(self):
self.name='lyl'
def sayhi(self):
print('hello,my name is',self.name)
『玖』 python腳本下面的 __init__.py 有什麼作用呢
_init_.py的作用:
首先一旦創建一個python的package,就會出來一個_init_.py的文件
init.py裡面一般寫這兩句話:
[1]:from .girl import hello
[2]:from .girl import *
[1]
一個是導入該package下的girl文件的hello函數
[2]
一個是導入該package下的girl文件的所有函數
比如在bb.py這個文件中導入girl的hello函數
原來init.py文件為空時:方法如下:
from boy.girl import hello
當寫成【1】時:
from boy import hello
兩者的關系時一致的。
至於第一個init.py有導入的作用,但我認為意義不大,
所以當前認為init.py最大的作用是區別該文件夾是package,還是純粹的目錄。