關於import和from xx import xx


一、關於導入模塊

1在導入模塊的一瞬間,解釋其會先通過sys.modules來判斷該模塊是否已經導入了,True 則不再重復導入,False則會做三件事

  1為導入的模塊創立心的名稱空間

  2在心創建的名稱空間中運行該代碼中的代碼

  3創建模塊的名字,並使用該名稱空間作為該模塊的當前模塊中引用的名字

2關於 " __name__"=="__main__":

  當我們把一個模塊作為程序運行的入口時,此時該模塊的__name__是"__main__;如果我們把模塊導入時,此時模塊內部的__name__事就該模塊自身的名字.

    注意:在py中直接輸入main可以出現神奇的效果!

 3我們還可以對導入的模塊進行重新命名: 

 4 正確的導入模塊的順序:

           1. 所有的模塊導入都要寫在最上面. 這是最基本的

           2. 先引入內置模塊           

   3. 再引入擴展模塊           

   4. 最后引入你自己定義的模塊

 二、關於from xx import xx:

跟import的區別就是可以部分導入,應用在模塊內容過多的時候,我們可以選擇性的導入要使用的內容:

關於from的注意點:

  1自己模塊的變量名不要跟導入模塊的變量名想沖突,不然系統會覆蓋掉導入的變量名

  2 自己創建的py文件名字也不要和系統內置的模塊重名,同理

       3 from xxx import xxx這種形式, import后⾯不可以出現"點" 也就是說from a.b import c是ok的. 但是 from a import b.c 是錯誤的

 

 三、一些補充

 有種特殊的寫法:from xx import *    在被導入的這個模塊中如果沒有寫出__all__則默認所有內容都導入;

                            否則,則導入__all__列表中列出來的所有名字.

 

 四、包

 什么是包:  包的本質是文件夾,py里創建的每個文件夾都可以被稱之為包,創建包不是為了運行,而是被導入使用,其作用就是將模塊文件組織起來,一次來提高程序的結構性和可維護性.py2規定包里面必須存在__init__.py文件,py3沿用了規定,但會在創建文件夾時,自動幫你創建__init__文件

 如何創建包:  只要是一個文件夾,有__init__.py 就可以.

1 關於__init__.py文件

不論使用哪種方式導入一個包,只要是第一次導入包\包的任何其他部分,都會先執行__init__py文件,這個文件可以是空,也可以存放一些初始化的代碼

注意點:可以在此文件中把包中所有模塊都調用進去,但要注意,路徑要寫絕對路徑,否則其他外部模塊調用包的時候會報錯,寫入之后,運行文件,只需調入包名字就可以擁有包中的所有模塊了(不常用,因為有時只是想導入包里面的部分模塊,這樣寫會占很大內存.)

包的注意事項:
1. 關於包相關的導入語句也分為import和from xxx import xxx兩種, 但⽆論使⽤哪種,
無論在什么位置, 在導入時都必須遵循⼀個原則: 凡是在導入時d帶點的. 點左邊都必須是⼀
個包. 否則報錯. 可以帶⼀連串的點. 比如a.b.c

2.如果用from 絕對路徑導入包,需要注意你的根目錄下能否找到目標包,如果找不到,需要一層層的寫

 

 

五、包中的絕對導入和相對導入(用於啟動的文件一定要寫在包的外部)

1絕對導入:是以根目錄作為起始

2相對導入:用 .或者 ..作為起始  (此方法不是給自己模塊用的,是給用於啟動的文件用的)

 注意點1: 此方法不是給自己模塊用的,是給用於啟動的文件用的,原因是py中不允許你運行的程序導包的時候超過當前包的范圍(相對導入),如果使用絕對導入,則沒這個問題; 

 注意點2:導入包的過程中出錯,先看print(sys.path.__str__())或者輸入指令:print(sys.path)(sys是關於pycharm操作系統的模塊,path是路徑,合起來,意為查看路徑) ,確認下是否真的能獲取到包的信息

 注意點3:  ./是在當前目錄;../是返回上級目錄下 #可以在cmd窗口進行驗證


免責聲明!

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



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