麪條版代碼-->函數版代碼-->文件版代碼(模塊)-->文件夾版(包)
代碼會變得更加簡潔,清晰,模塊化
一個模塊裏會有多個函數,至關於一個大功能分紅多個小功能
1.自定義模塊
2.第三方模塊,如requests
3.內置模塊,如time
4.包(文件夾)app
#test.py import time 1.打開time文件 2.使用python解釋器運行time文件,而後把解釋文件獲得的名字放入time模塊的名稱空間 3.test.py中會有一個time變量指向time模塊的名稱空間,若是導入方式爲'import time as t', 則就是變量指向time模塊的名稱空間 from time import sleep 1.打開time文件 2.使用python解釋器運行time文件,而後把解釋文件獲得的名字放入time模塊的名稱空間 3.test.py中會有一個sleep變量指向time模塊名稱空間的sleep,若是導入方式爲'from time import sleep,local time',則是由一個sleep變量和一個localtime變量指向time模塊名稱空間中的sleep和localtime
# m1.py from m2 import y x = 10 # m2.py from m1 import x y = 20
爲何會有循環導入問題模塊化
1.m1文件須要導入m2文件中的y函數
2.m2文件須要導入m1文件的xcode
3.代碼自上而下運行,m1須要m2的y,而後會去m2的名稱空間找到y,可是在找y以前,須要運行m2的代碼,m2的代碼第一句是去找m1的x,而後又回去運行m1的代碼,m1的第一行代碼又是去尋找m2的yblog
4.就是說m1只能運行第一行,m2也只能運行第一行,因此出現了循環導入問題內存
# m1.py def f1(): from m2 import y x = 10 f1() # m2.py def f2(): from m1 import x y = 20 f2()
名字的執行順序:內置(python解釋器啓動的時候)-->全局(文件執行的時候)-->局部(函數調用得時候)requests
1.去內存中找it
# test.py import m1 #從m1.py文件中導入的,而後會生成m1模塊的名稱空間 import time # 刪除m1.py文件,m1模塊的名稱空間仍然存在 time.sleep(10) import m1 #不報錯,必定不是從文件中獲取了m1模塊,而是從內存中獲取的
2.去內置模塊中找class
# time.py print('from time') #test.py import time #無任何打印,因此他先去內置模塊中找了
3.環境變量中找
import sys print(sys.path)
# b/a/m1.py #b/test.py import m1 #報錯 sys.path.append('b/a') import m1
1.模塊文件,被當作模塊給導入,有多個
2.運行文件,被當作執行文件執行,只能有一個
# m1.py def f1(): print('from f1') f1() # test.py import m1 m1.f1() #運行兩次
# m1.py def f1(): print('from f1') if __name__ == '__main__': #__name__在m1.py被當作模塊導入時是模塊名,做爲執行文件時是'__main__' f1() # test.py import m1 m1.f1() # 運行一次
直接運用老師的總結,對於後期回顧知識點很是好