1. import
2. from inport
3. 模組引用中的情況
4. 包
import
如何建立一個模組:
建立一個py檔案,給他起一個符合變數命名規則的名字,這個名字就是模組。
匯入模組的時候發生了什麼?
1.找到模組,判斷模組是否被匯入過,(import sys >>>>print(sys.模組名))。
2.如果模組沒有被匯入,就建立一個屬於這個模組的名稱空間。
3.讓模組名指向這個空間,然後執行該模組中的程式碼。
匯入一個模組就是執行了一個模組
import name print(name.name) print(name.read) name.read() 123456 alex hello,word
import name bbb="jeav yang" print(name.bbb) # print(name.read) name.read() print(bbb) 123456 alex hello,word jeav yang
模組的別名:import 模組名 as 新的模組名 如果給模組起了別名,使用這個模組就能使用的別名的應用了
def func(dic, t='json'): if t == 'json': import json as aaa elif t == 'pickle': import pickle as aaa return aaa.dumps(dic)
匯入多個模組:
以os模組為例:import os .time>>>>>>>import os as o,time as t
模組的匯入順序:
內建模組>>>>擴充套件模組>>>>自定義模組
from import
怎麼使用from import:需要從哪個檔案中使用那個名字,就把這個名字匯入進來
egg:from
my_module import name
引入from import 的時候,仍然執行了這個被匯入的檔案,就是import誰,就執行誰
from my_module import read1 read1() 12345 54321 hello world
當前檔案名稱空間和模組的名稱空間問題:
如果被引用的名字在當前檔案中,就執行當前檔案的名字
from import 匯入的時候發生了什麼
1.找到要被匯入的模組
2.判斷模組是否被匯入過
3.若沒有被匯入就建立一個屬於這個模組的名稱空間。
4.執行這個檔案
5.如果被匯入過,找到你要匯入的變數,給匯入的變數建立一個引用,指向要匯入的變數
匯入多個名字
from my_module import read1,read2 read1() read2() 12345 54321 hello world in read1 func alex
給匯入的名字起別名:避免匯入的名字和當前檔案中的名字重複:
from my_module import read1 as r1,read2 as r2 def read1(): print('in my read1') r1() r2() read1() 12345 54321 hello world in read1 func alex in my read1
其他操作
from my_module import * 表示執行匯入模組的所有內容
from my_module import * name = 'egon' print(name) # egon read1() read2() 12345 54321 egon hello world in read1 func alex
_all_約束*匯入的個數 _all_=[誰],就匯入誰,只能用來約束
模組引用中的情況
1.模組的迴圈引用 重點***
模組間不允許迴圈引用
2.模組的載入和修改
如果已經被匯入到的模組發生了修改,是不會被感知到的,想要修改的話就要重啟程式
3.把模組當成指令碼來使用 賊重要************
if __name__ == '__main__':
程式碼
寫在這裡面的程式碼只有這個檔案被當做指令碼執行的時候才執行
當一個py檔案做指令碼的時候,就提供一個功能。當作為模組匯入的時候,能呼叫這個功能,但不能自主互動
一個檔案中的_nane_變數:
當檔案被當做指令碼執行的時候,_name_=="_main_"
當檔案被當做模組匯入的時候,_name _=="模組的名字"
4.模組搜尋路徑
被當做指令碼執行檔案的時候,同目錄下的檔案可以直接匯入,除此之外,其他路徑下的模組被匯入的時候需要自己修改sys.path列表
不在同一目錄下的話:就呼叫sys模組
import sys
print(sys.path)
path=r"要匯入模組的路徑'
sys.path.append(path)
然後呼叫你要匯入的模組
import sys print(sys.path) path=r"F:\上課作業視訊\模組的相關知識\day21\code\day21\5模組的迴圈引用" sys.path.append(path) import hhh ['F:\\上課作業視訊\\模組的相關知識\\day21\\code\\day21', 'F:\\上課作業視訊', 'C:\\Python36\\python36.zip', 'C:\\Python36\\DLLs', 'C:\\Python36\\lib', 'C:\\Python36', 'C:\\Python36\\lib\\site-packages', 'C:\\Program Files\\JetBrains\\PyCharm 2018.1.3\\helpers\\pycharm_matplotlib_backend'] 123456798
包:凡是匯入時帶點的,點的左邊必須是包
什麼是包:資料夾中有一個__int__.py檔案,也是幾個模組的集合
從包中匯入模組:
1.import方式
egg:
import glance.api.policy as hhh
hhh.get()
2.from import
from glance.api.import policy
egg:
from glance.api.policy import get
get()