python基礎之模塊高級

模塊

  1. import如何工作

    導入只發生一次
    2. 找到模塊文件
    3. 編譯成位碼(需要時)
    4. 執行模塊的代碼來創建其所定義的對象

    Python把導入的模塊存貯到sys.moudles表中,並在導入操作的時候檢查該表,如果模塊不存在,將會啓動上面三個步驟。

  2. 搜索

    大多數情況下,可以依賴模塊導入的路徑來搜索路徑,不需要額外配置路徑。但是,也可以自己預定義路徑,那麼搜索的順序:

    1. 程序的主目錄

    2. PYHONPATH目錄(如果已經進行了設置)

          import sys
          print(list(sys.path))
          #手動添加目錄
          sys.path.append('c:\\python\\modules')
          sys.path.append('c:/python/modules')
      
      
    3. 標準鏈接庫目錄

    4. 任何.pth文件的內容(如果存在的話)

      在python安裝路徑的site-packages目錄下修建了PckPath.pth文件

        /Users/lzhan/AI/python/project_modules/modules
    
  3. 編譯

    當文件導入時,就會進行編譯。因此、通常不會看到程序頂層文件的.pyc字節碼文件。除非這個文件也被其他文件導入:只有被導入的文件纔會留下字節碼文件。頂層文件的字節碼是在內部使用後就丟棄了。

  4. 執行

    和def一樣,import和form是可執行語句,而不是在編譯期間的聲明。直到python執行到這些語句時,纔會進行解析。

  5. distutils

  6. from

    from會把模塊中的變量複製到另一個作用域,所以頂層文件中就可以直接使用該變量了。

        import modulea
        from modulea import * #等價
    

    from語句智能用在模塊文件的頂部,不能放在函數中。

    所以下面代碼是等價的

        from module import name1,name2
        #等價於
        import module
        name1=module.name1
        name2=module.name2
        del module
    

    from語句有破壞命名空間的潛質!!

  7. 查看模塊命名空間

    import public_var as p                                          
    print(p.__dict__)              
    print(dir(p))                  
    
  8. reload()

    1. reload是Python的內置函數,而不是語句

    2. reload只能重載已經存在的模塊對象,而不是變量

    3. relaod必須手動導入

      import public_var as p
      from importlib import reload
      
      print(p.urls['first'])
      
      p.urls['first']='baidu.com'
      
      print(p.urls['first'])
      
      reload(p)
      print(p.urls['first'])
      
  9. 包導入

        import modules.public_var
        from modules.public_var import *
    

    注意
    作爲包的目錄內必須存在__init__.py文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章