1. 程式人生 > >十九、模塊和包

十九、模塊和包

http 變化 圖片 發現 .py 一個 遇到 bsp pri

什麽叫做包:簡單點說就是帶_init_.py文件的文件夾就是包。當我們去調用這個包的時候其實是優先執行了包裏面的_init_文件。而包裏面的其他的py文件就是模塊

1.當我們需要直接調用某模塊的時候,而又不確定可不可以直接調用時,可以這樣操作

import sys

print(sys.path)

查看這個列表的第一項,你當前所在的py文件的文件夾目錄就是第一項,而這個文件夾目錄下的模塊和包就是你可以調用的。

2。模塊和模塊之間的互相調用時,只會調用一次,而不會發生重復調用,因為模塊一旦被調用成功,就會加入到sys.modules這個字典中,也就是說你在調用模塊時,首先python解釋器會自動的去找sys.modules這個字典中有沒有,有的化就直接用了,不會再去調用一次,所以說模塊只會調用一次。

3.跨包調用問題,就是我他媽的糾結了很久的如何挎包調用模塊,這他媽的個根本就做不到,我在這個地方糾結了大量的時間。現在我總算是明白了,現在我寫出來提醒我自己,原因如下:

技術分享圖片

這是一個路徑圖,這裏我想從c.py裏面調用b.py 這是不可以的騷年,這樣調用就是不行,別問為什麽就是不行,python就是這麽規定的,所以記住就行了!!!!!!

但是我就想執行啊怎麽辦呢。。

每當我們遇到這種問題的時候,我們要立馬想起兩個問題1 你所在的py文件的sys.path的第一個文件夾是什麽 2 執行一個包的時候首先要執行這個包下面的_init_文件 。騷年你記住了嗎 這兩個東西????

去哦們扯了半天還是沒有說該怎麽辦。。。。我現在就來告訴你!!!!這時候我們仔細觀察,發現c.py和b.py分別在mode3 和mode2裏面 而這兩個包又都在mode1裏面 這時候我們只能,對就是只能

,只能在和mode1同級別的py文件裏面通過執行一系列的關系來讓c.py執行b.py。至於具體怎麽操作,很簡單,就是在每個包裏面的_init_文件裏寫一些調用模塊就行了。

4.絕對路徑的模塊調用,寫法就是在每個包的ini文件裏面寫清楚調用模塊的路徑方式,然後到和包同一目錄下的py文件裏面去執行,但是這樣有問題比如說上圖中的,mode1的路徑發生變化,所有包的init文件裏面的路徑都要改,所以就有了相對路徑的調用。

5。相對路徑的調用,就是和絕對路徑的寫法是一樣的就是把當前py文件的目錄換成 . 父目錄換成.. 就行了,還有就是前面說的跨目錄調用問題,也是只能在外面實現,原因是因為一個py文件不能既當模塊執行,又當腳本執行。

十九、模塊和包