目錄注意事項
模組不來總結了,直接去看吧
包是模組的一種形式,包的本質就是乙個含有.py
的檔案的資料夾。
模組的第乙個版本只有10個功能,但是未來在擴充套件版本的時候,模組名和用法應該最好不要去修改,但是這只是對使用者友好,而由於版本擴充套件,檔案越來越大,模組設計者對模組的管理、維護會越來越複雜,因此我們可以使用包來擴充套件模組的功能。
匯入模組發生的三件事:
建立乙個包的命名空間
執行py檔案,將執行過程中產生的名字存放於命名空間中。
在當前執行檔案中拿到乙個名字aaa,aaa是指向包的命名空間的
匯入包發生的三件事:
建立乙個包的命名空間
由於包是乙個資料夾,無法執行包,因此執行包下的.py檔案,將執行過程中產生的名字存放於包命名空間中(即包命名空間中存放的名字都是來自於.py)
在當前執行檔案中拿到乙個名字aaa,aaa是指向包的命名空間的
匯入包就是在匯入包下的.py,並且可以使用以下兩種方式匯入:
import ...
from ... import...
如下我們如果需要擴充套件aaa.py模組,需要建立乙個aaa的目錄檔案,並且刪除aaa.py檔案,將aaa.py修改成m1.py和m2.py兩個檔案,讓模組的功能使用方法不改變。
# aaa.py
def func1():
pass
def func2():
pass
def func3():
pass
def func4():
pass
def func5():
pass
def func6():
pass
# m1.py
def func1():
pass
def func2():
pass
def func3():
pass
# m2.py
def func4():
pass
def func5():
pass
def func6():
pass
# run.py
import aaa
aaa.func1()
aaa.func2()
aaa.func3()
aaa.func4()
aaa.func5()
aaa.func6()
# aaa/.py
func1 = 111
func2 = 222
func3 = 333
func4 = 444
func5 = 555
func6 = 666
由於在__init__.py
中定義了func1,因此我們可以在run.py檔案中匯入func1,但是這個func1並不是我們想要的func1,因此需要修改__init__.py
檔案,又由於執行檔案run.py的環境變數不為aaa,因此直接使用import匯入m1會報錯,因此使用from匯入。
# aaa/.py
from aaa.m1 import func1
from aaa.m2 import func2
# run.py
import aaa
print(aaa.func1())
print(aaa.func2())
絕對匯入:
# aaa/.py
from aaa.m1 import func1
from aaa.m2 import func2
相對匯入:
from .m1 import func1
from .m2 import func2
包內所有的檔案都是被匯入使用的,而不是被直接執行的
包內部模組之間的匯入可以使用絕對匯入(以包的根目錄為基準)與相對匯入(以當前被匯入的模組所在的目錄為基準),推薦使用相對匯入
當檔案是執行檔案時,無法在該檔案內用相對匯入的語法,只有在檔案時被當作模組匯入時,該檔案內才能使用相對匯入的語法
凡是在匯入時帶點的,點的左邊都必須是乙個包,import aaa.bbb.m3.f3
錯誤
隨便寫寫Python day17 物件導向作業
定義乙個矩形類,擁有屬性 長 寬 擁有方法 求周長 求面積 class rectangle def init self,length 0,width 0 self.length length self.width width defperimeter self return2 self.length...
python day40 正式學習
目錄執行緒定時器 程序池和執行緒池 import queue q queue.queue q.put 123 q.put 456 q.put 789 print q.get print q.get print q.get q.task done q.task done q.task done q.j...
python day39 正式學習
目錄訊號量 gil全域性直譯器鎖 from threading import thread,lock x 0lock lock def test lock.acquire 鎖住不讓cpu切換 global x for i in range 111100 x 1 lock.release t thre...