1. 程式人生 > >python基礎:模組的搜尋路徑、pyc臨時檔案、內建屬性

python基礎:模組的搜尋路徑、pyc臨時檔案、內建屬性

當你匯入一個模組,Python解析器對模組位置的搜尋順序是:
1、當前目錄
2、如果不在當前目錄,Python則搜尋在shell變數PYTHONPATH下的每個目錄。
由sys模組的sys.path方法來規定

因為sys.path返回的資料型別是列表
1、列表可以修改、我們匯入的範圍也可以通過修改sys.path這個列表獲得暫時的修改。例如通過 sys.path.append()新增目錄,匯入額外目錄的模組。
2、列表是有序的,當搜尋的過程當中,在第一個路徑下搜尋到了,就停止搜尋。而且sys.path第一個路 徑是指令碼的當前路徑,所以禁止大家講自己的指令碼命名成模組的名稱。
因此需要注意的是:自己模組命名的時候不能和系統的模組名稱相同。
在這裡插入圖片描述

pyc臨時檔案
為了提高載入模組的速度,python直譯器會在__pycache__目錄中下快取每個模組編譯後的版本,之後,再次被匯入時,實際上匯入的是這個.pyc的臨時檔案。
在這裡插入圖片描述

把模組當做指令碼執行
我們可以通過模組的全域性變數__name__來檢視模組名:
當做指令碼執行:
name 的值 等於’main
當做模組匯入:
__name__的值等於模組名
作用:用來控制.py檔案在不同的應用場景下執行不同的邏輯
if name == ‘main’:
建立model03.py檔案,其程式是:

 name='haitao'
    print(__name__)  #__name__是內建屬性  打印出來是 __main__
    #__main__
if __name__ == '__main__':
    print('xxx')      #  xxx

模組當指令碼執行時,name = ‘main
模組被匯入時,name 就是模組變數名稱,在被呼叫時,其
測試程式碼將不會執行。

import model03
print(model03.__name__)      

執行結果:

model03
model03

內建屬性的兩個作用:

#1、根據__name__的值可以寫測試程式碼:
# 根據__name__的值可以寫測試程式碼
# if __name__ == "__main__":
if __name__ == '__main__':
        print('xxx')


# 2、做測試入口
def func():
    print('程式開始了')
def func1():
    print('程式結束了')
if __name__ == '__main__':
    func()
    func1()

執行結果:

程式開始了
程式結束了