国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【python開發】1. __init__.py與導包

李義 / 3315人閱讀

摘要:原理根據的開發文檔,模塊導入主要有以下的步驟,創建一個新空的對象它可能包含多個,把這個對象插入中,裝載的代碼如果需要,首先必須編譯,執行新的中對應的代碼。因此可以將初始化代碼放入該文件中。

@

python開發

開始拿著github上的python代碼狂啃時,發現很多知道干嘛又不知道為啥這樣的代碼,開始瘋狂補漏。???

package 導包

用處1:導入包

比如這樣的架構:

  package1/    -- subPack1/       -- __init__.py       --  module_11.py       --  module_12.py       --  module_13.py    --subPack2/        --  __init__.py        --  module_21.py        --  module_22.py    ……

? 如果想在module_21.py中導入module_11.py的某一個class或者function時,則需要subPack1中包含__init__.py,即使__init__.py是空的也可以,否則會報錯找不到module。

2. 原理

根據python的開發文檔,模塊導入主要有以下的步驟:
1,創建一個新空的module對象(它可能包含多個module)
2,把這個module對象插入sys.module中
3,裝載module的代碼(如果需要,首先必須編譯)
4,執行新的module中對應的代碼。
在執行第3步時,首先要找到module程序所在位置,其查找順序如下

1.在當前路徑以及當前目錄指定的sys.path
2.從環境變量PYTHONPATH進行查找
3.python的安裝設置相關的默認路徑

? 如果當前路徑或者PYTHONPATH存在與標準module相同的module,則會覆蓋標準module,也就是說,如果當下目錄存在xml.py 那么執行import xml.py時,導入的當前目錄下的module,而不是系統標準的xml。
? 那現在問題來了,怎么知道去哪兒找這些模塊呢,有的文件夾我想被搜索,有的文件夾不想被搜索,這里就需要__init__.py文件了,在文件夾下面有這個文件,則默認該文件夾是個package,可以被搜索到。這是__init__.py的用處之一。

用處2:簡化包的導入

? 比如有個python文件依賴上面的所有文件:

from package1.subPack1 import module_11from package1.subPack1 import module_12from package1.subPack1 import module_21from package1.subPack2 import module_22from package1.subPack2 import module_23

?這個例子里面文件比較少,如果模塊比較大,目錄比較深的話,可能自己都記不清該如何導入。這種情況下,__init__.py 就很有作用了。我們先來看看該文件是如何工作的。
? 實際上,如果目錄中包含了 __init__.py 時,當用 import 導入該目錄時,會優先執行 __init__.py 里面的代碼。

? 我們在package1目錄下增加一個__init__.py 文件:

  package1/    -- __init__.py    -- subPack1/       -- __init__.py       --  module_11.py       --  module_12.py       --  module_13.py    --subPack2/        --  _ _init__.py        --  module_21.py        --  module_22.py    ……

? 如果在__init__.py里面print一句話print("the package1 is loaded "),再在python下導入包

>>python>>import package1the package1 is loaded

控制模塊導入

這樣我們就可以在__init__.py里面導入需要文件包:
from package1.subPack1 import module_11
然后在python里面導入整個包:
import package1
如果要導入package1下面整個文件夾下面的包,則偷懶一點:
from package1 import *
這里引出了另外一個問題,為啥* 能導入所有的模塊呢,這里涉及到一個變量__all__(這里后續補充)
綜上,在了解了 __init__.py 的工作原理后,應該能理解該文件就是一個正常的python代碼文件?!∫虼丝梢詫⒊跏蓟a放入該文件中。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/125015.html

相關文章

  • python中的__init__.py文件和導包總結

    摘要:文件和導包總結也是一門學問導入方式的作用把某一個目錄變成一個包,使得其他模塊使用包包中的某一模塊函數變量類這種方式時可用什么時候有用如果某一個目錄在后期導入使用時只是作為中間目錄銜接使用,則可以不加,如果某個目錄后期會被直接或間接顯示地作為 python __init__.py文件和導包總結 import也是一門學問~ 導入方式 import from xxx import y...

    CodeSheep 評論0 收藏0
  • 120 道 Python 面試筆試題匯總(上篇)

    摘要:所以在多線程中,線程的運行仍是有先后順序的,并不是同時進行。哈希函數的目的是使鍵均勻地分布在數組中。由于不同的鍵可能具有相同的哈希值,即可能出現沖突,高級的哈希函數能夠使沖突數目最小化。 首先這篇文章在我的《Python數據結構》公眾號已經提及,但是本篇文章提供了更為高級的解法,來發散大家的思維;同時為大家提供我的草稿py文件,大家可以關注《Python數據結構》公眾號后恢復 120 ...

    susheng 評論0 收藏0
  • Flask Web 測試驅動開發最佳實踐之 Flask 實例

    摘要:當功能越來越復雜的時候,你可能修改了一些東西,導致另外一個功能的不可用,而單元測試也能保證了原有功能被破壞后能被檢測出來。 showImg(https://segmentfault.com/img/remote/1460000017081749); 前言 前一篇講到了 TDD 測試驅動開發的相關概念和環境搭建,這篇就著手開始用TDD方式開發了。首先這篇需要編寫用戶相關的API接口,如...

    wuyangnju 評論0 收藏0
  • python初學——網絡編程之FTP服務器支持多并發版本

    摘要:擴展支持多用戶并發訪問與線程池。項目請見初學網絡編程之服務器。不允許超過磁盤配額。該文件是一個使用模塊編寫的線程池類。這一步就做到了線程池的作用。 對MYFTP項目進行升級。擴展支持多用戶并發訪問與線程池。MYFTP項目請見python初學——網絡編程之FTP服務器。 擴展需求 1.在之前開發的FTP基礎上,開發支持多并發的功能2.不能使用SocketServer模塊,必須自己實現多線...

    oysun 評論0 收藏0
  • django開發-django和tornado的不同

    摘要:中常用的幾個框架有等,今天來總結一下和的不同。本文使用的環境是。文件可以加載路由信息和項目配置信息,文件負責啟動項目。以上就簡單的比較了和幾個方面的不同,它們各有優缺點,實際工作中可以根據不同的需求選擇不同的框架進行開發。 python中常用的幾個web框架有django, tornado, flask等,今天來總結一下django和tornado的不同。工作中django和torna...

    Reducto 評論0 收藏0

發表評論

0條評論

李義

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<