06.05自我總結
一.模塊導入及使用
1.模塊導入的兩種方式
我們拿time模塊並使用其中的time功能進行舉例
a)第一種
import time
print(time.time)
import首次導入模塊發生了3件事:
- 打開模塊文件
- 執行模塊對應的文件,將執行過程中產生的名字都丟到模塊的名稱空間
- 在程序中會有一個模塊名稱指向模塊名稱空間(如果他是import time as f)則是f指向模塊空間
- 在當前執行文件中拿到一個模塊名
b)第二種
from time import time
print(time)
from...import...首次導入模塊發生了3件事:
- 以模塊為准創造一個模塊的名稱空間
- 執行模塊對應的文件,將執行過程中產生的名字都丟到模塊的名稱空間
- 在當前執行文件的名稱空間中拿到一個名字,該名字直接指向模塊中的某一個名字,意味着可以不用加任何前綴而直接使用
- 優點:不用加前綴,代碼更加精簡
- 缺點:容易與當前執行文件中名稱空間中的名字沖突
c)相同點和不同點
相同點:
- 兩者都會執行模塊對應的文件,兩者都會產生模塊的名稱空間
- 兩者調用功能時,需要跑到定義時尋找作用域關系,與調用位置無關
不同點
- import需要加前綴;from...import...不需要加前綴
2.關鍵字
_all_
如果一個模塊的文件內寫有_all_
import 模塊名字,默認導入所有模塊
而當模塊中出現_all_時候,他只會導入_all_后面列表內的名稱
二.模塊循環導入
1.情況
創建兩個模塊
# m1.py
print('from m1.py')
from m2 import x
y = 'm1'
# m2.py
print('from m2.py')
from m1 import y
x = 'm2'
應用程序導入模塊
# run.py
import m1
2.解決辦法
第一種
把m1中吧form m2 import x 將能找到的y放置form m2 import x,上面,讓他在沒有導入模塊的時候就發現y從而不會尋找
# m1.py
print('from m1.py')
y = 'm1'
from m2 import x
第二種
把from m2 import x 用函數把他變成局部,文件加載順序先全局在局部
def f1():
from m2 import x
y = 'm1'
f()
三.模塊搜索路徑
去內存中找去→內置模塊中找→去環境變量中找
打印環境變量
import sys
print(sys.path)
四.python文件的兩種用途
1.模塊文件
2.運行文件
搜索路徑以運行文件為基准
五.關鍵字_name_
在執行文件中_name_會被讀取成'__main__'
在導入模塊的時候__name__會變成模塊名字