python基礎--模塊的查找順序以及相對導入和絕對導入


模塊:模塊是一系列功能的結合體

    模塊的來源:

        內置的模塊(python解釋器自帶的)

        第三方(開發者編寫的模塊)

        自定義的模塊(自己編寫的模塊)

    模塊的四種表現形式:

        1、使用python編寫的py文件(也就意味着py文件也可以稱之為模塊:一個py文件也可以稱之為一個模塊)

        2、已被編譯為共享庫或DLL的C或C++擴展(了解)

        3、把一系列模塊組織到一起的文件夾(文件夾下有一個__init__.py的文件,該文件夾被稱之為包)   包:是一系列py文件的結合體

        4、使用C編寫並連接到python解釋器的內置模塊

    為什么要使用模塊:

        1、用別人寫好了的模塊(內置的或是第三方的);典型的拿來主義,提高了開發的效率

        2、使用自己寫的模塊(自定義的);當程序比較龐大的時候,你的項目不可能只在一個py文件中,那么當多個文件中都需要使用相同方法的時候,可以將該公共方法寫到一個py文件中。(當其他的文件要調用了就可以直接以模塊的形式導入過去了)

    注意點:導入的時候一定要區分哪個是執行文件,哪個是被導入的文件。

 

 import導入:

    導入的三個步驟:

        1、運行執行文件

        2、運行文件中的代碼,將產生的名字和值存放到當前文件的名稱空間中

        3、在執行文件中產生一個指向名稱空間的名字

    import導入:訪問模塊名稱空間中的名字統一使用:模塊名.名字

        只有當幾個模塊有相同部分的時候或者屬於同一個模塊,可以使用一次性導入,要是幾個模塊沒有聯系的話,應該分多次導入。ps:模塊的導入的句式應該是在文件的開頭,當文件名字比較復雜的時候,應該學會使用as給當前模塊區別名。

    

from ... import ...導入:

    導入的三個步驟:

        1、運行執行文件

        2、執行文件中的代碼,將產生的名字和值對應的放到文件的的名稱空間中

        3、最后直接拿到指向被導入模塊中的某個值

    缺點:

        1、訪問的模塊中名字不需要加模塊名的前綴

        2、在訪問模塊中的名字可能會與當前執行文件中的名字沖突

    補充:

        可以使用*一次性將模塊中的名字全部加載過來,但是不推薦使用這種方式,因為一些模塊中方法太多太多了,你根本不知道到底哪些名字可以使用。

        __all__:可以指定所在py文件中被當作導入的時候可以限制導入者能夠拿到的名字個數。

 

 

循環導入問題的解決思路:

    如果出現這種問題那么一定是你的程序設計不合理,這種問題應該在程序設計階段就應該避免。

    問題解決方式:

        方式一:將循環導入的句式寫在文件的最下方

        方式二:函數內導入模塊

    

 

__name__的用法:當

    文件被當作執行文件的時候__name__打印的結果是__main__

    當文件被當作模塊導入的時候__name__打印的結果是模塊名(沒有后綴名)

 

 

模塊的查找順序:

    查找順序:

        1、先從內存找  2、內置中找 3、sys.path中找(環境變量)一定要分清楚誰是執行文件誰是被導入文件

        sys返回的是一個列表,里面放了一些文件的路徑,但是第一個路徑永遠是文件所在的文件夾

    注意:py文件的文件名不應該與模塊名(內置的、第三方的)沖突

 

模塊的絕對導入:

    絕對導入必須依據執行文件所在的文件夾路徑為准

        絕對導入無論在執行文件中還是被導入文件中都是適用的

 

 

想對導入:

    .表示的是當前路徑

    ..表示的是上一級路徑

    ...表示的是上上一級路徑

注意:

    相對導入不能再執行文件中使用

    相對導入只能在被導入的模塊中使用,使用相對導入,就不需要考慮執行文件到底是誰了,只需要直到模塊與模塊之間路徑的關系

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM