[2015-08-11] python022

Python模塊基礎

Python模塊:

  • 可以將代碼量較大的程序分割成多個有組織的、彼此獨立但又能互相交互的代碼片段,這些自我包含的有組織的代碼段就是模塊
  • 模塊在物理形式上表現爲以.py結尾的代碼文件
    • 一個文件被看作一個獨立的模塊,一個模塊也可以被看作是一個文件
    • 模塊的文件名就是模塊的名字加上擴展名.py
    • 每個模塊都有自己的名稱空間
  • Python允許“導入”其它模塊以實現代碼重用,從而也實現了將獨立的代碼文件組織成更大的程序系統
    • Python中,模塊也是對象
    • 在一個模塊的頂層定義的所有變量都在被導入時成爲了被導入模塊的屬性

Python程序架構:

  • 一個Python程序通常包括一個頂層程序文件和其它的模塊文件(0個、1個或多個)
    • 頂層文件:包含了程序的主要控制流程
    • 模塊文件:爲頂層文件或其它模塊提供各種功能性組件
  • 模塊首次導入(或重載)時,Python會立即執行模塊文件的頂層程序代碼(不在函數內的代碼),而位於函數主體內的代碼直到函數被調用後纔會執行
  • 標準庫模塊 : help(‘modules’)可查詢所有標準庫模塊

模塊的執行環境:

  • 模塊是被導入的,但模塊也可以導入和使用其它模塊,這些模塊可以用Pyhton或其它編程語言寫成
  • 模塊可內含變量、函數以及類來進行其工作,而函數和類可以包含變量和其它元素

導入模塊:

  • 在導入模塊時只能使用模塊名,而不能使用帶.py後綴的模塊文件名

  • import語句

導入指定的整個模塊,包括生成一個以模塊名命名的名稱空間
    import module1[,module2[,...moduleN]]
        建議一個import語句只導入一個模塊
    import module as module_alias
  • from-import語句
常用於只導入指定模塊的部分屬性至當前名稱空間
    from module import name1[,name2[,...nameN]]
  • import和from-import是賦值語句
    • import和from是可執行語句,類似於def,因此,他們可以嵌套在if測試中,出現在def中等等
    • Python執行到這些語句時纔會對其進行解析,這意味着,所有來自模塊的屬性僅在import語句執行後才能使用
  • import和from都是隱性賦值語句
    • import將整個模塊對象賦值給一個變量名
    • from將一個或多個變量名賦值給導入此模塊的模塊中的同名對象
  • 模塊就是名稱空間
    • 模塊的名稱空間可以通過屬性_ _ dict _ _或dir(M)獲取
    • 模塊屬性可通過點號(.)運算符獲取,格式爲M.attr
    • 模塊是一個獨立的作用域(本地變量就是全局變量)

import的工作機制:

  • import語句導入指定的模塊時會執行三個步驟:
    • 找到模塊文件
      • 在指定的路徑下搜索模塊文件
    • 編譯成字節碼
      • 文件導入時就會編譯,因此,頂層文件的.pyc字節碼文件在內部使用後會被丟棄,只有被導入的文件纔會留下.pyc文件
    • 執行模塊的代碼來創建其所定義的對象
      • 模塊文件中的所有語句會依次執行,從頭至尾,而此步驟中任何對變量名的賦值運算,都會產生所得到的模塊文件的屬性
  • 注意:模塊只在第一次導入時纔會執行如上步驟
    • 後續的導入操作只不過是提取內存中已加載的模塊對象
    • reload()可用於重新加載模塊

模塊搜索:

  • Python解釋器在import模塊時必須先找到對應的模塊文件
    • 程序的主目錄
    • PYTHONPATH目錄(如果設置了此變量)
    • 標準鏈接庫目錄
    • 任何.pth文件的內容(如果存在.pth文件)
  • 這四個組件組合起來即爲sys.path所包含的路徑,而Python會選擇在搜索路徑中的第一個符合導入文件名的文件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章