目錄python
麪條版代碼--》函數版代碼--》文件版代碼(模塊)--》文件夾版(包)markdown
代碼會變得更加簡潔,清晰,模塊化app
一個模塊裏會有多個函數,至關於一個大功能細分紅多個小功能模塊化
markdown_add_index.py import time 1. 打開time文件 2. 使用Python解釋器運行time文件,而後把解釋文件獲得的名字放入time模塊的名稱空間 3. test.py中會有一個time變量指向time模塊的名稱空間,若是導入方式爲`import time as t`,則就是t變量指向time模塊的名稱空間 from time import sleep 1. 打開time文件 2. 使用Python解釋器運行time文件,而後把解釋文件獲得的名字放入time模塊的名稱空間 3. test.py中會有一個sleep變量指向time模塊名稱空間中的sleep,若是導入方式爲`from time import sleep,localtime`,則是由一個sleep變量和一個localtime變量指向time模塊名稱空間中的sleep和localtime
# m1.py from m2 import y x = 10 # m2.py from m1 import x y = 20
爲何會有循環導入問題:函數
# m1.py x = 10 from m2 import y # m2.py y = 20 from m1 import x
# m1.py def f1(): from m2 import y x = 10 f1() # m2.py def f2(): from m1 import x y = 20 f2()
名字的執行順序:內置(python解釋器啓動的時候)-->全局(文件執行的時候)-->局部(函數調用的時候)code
1.去內存中找內存
# test.py import m1 # 從m1.py文件中導入的,而後會生成m1模塊的名稱空間 import time # 刪除m1.py文件,m1模塊的名稱空間仍然存在 time.sleep(10) import m1 # 不報錯,必定不是從文件中獲取了m1模塊,而是從內存中獲取的
2.去內置模塊中找requests
# time.py print('from time') # test.py import time # 無任何打印,因此他先去內置模塊中找了
3.環境變量中找it
import sys print(sys.path)
# b/a/m1.py # b/test.py import m1 # 報錯 sys.path.append('b/a') import m1
# 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() markdown_add_index.py import m1 m1.f1() # 運行兩次
# m1.py f1 f2 f3 f4 # m2.py f1 f2 # m3.py f3 f4