1. 程式人生 > 其它 >python模組微講解(二)

python模組微講解(二)

python模組微講解(二)

1.迴圈匯入問題

迴圈匯入就是你匯入我、我匯入你,互相呼叫,迴圈匯入很容易出現某個名字還沒有被建立就被使用而報錯,所以在我們做專案的時候就要儘量避免迴圈匯入問題,如果避免不了,那就要確保使用的名字提前定義好,有兩種方式:

(1).將匯入模組的名字寫在定義名字的下面。

(2).將匯入模組的名字寫到函式體程式碼中。

2.判斷檔案型別

pycharm中的py檔案分為兩種型別:
(1).執行檔案

(2).被匯入檔案

有一個內建方法"__name__"可以來區別,當"__name__"方法在執行檔案中,輸出的是"__main__":

 

當"__name__"方法在被匯入檔案中,輸出的是被匯入的檔名:

 

 

 

 

 我們在自定義模組的時候,模組中可能會寫很多的功能,我們肯定需要自己測試一下,會產生很多的測試程式碼,我們可以使用"__name__"來進行區分:

 

 

 3.模組查詢順序

(1).先從記憶體空間中查詢

我們可以驗證一下,先寫一個執行檔案,再寫一個被匯入檔案,在執行檔案中匯入被匯入檔案,並匯入"time"模組,讓程式睡眠15s的時間,然後刪除被匯入檔案,發現依然可以列印,再次執行就會報錯,因為已經沒有了剛剛的被匯入檔案,記憶體中也已經清除:

import modular26
import time
time.sleep(15)
modular26.index()

(2).在內建模組中查詢

比如我們上述剛剛用到的time模組,就是內建模組。

這裡我們要強調一下:我們在定義py檔名的時候,儘量不要與模組名一樣,這裡的模組名是內建模組和第三方模組。

(3).在sys.path內查詢

當在記憶體空間和內建模組找不到的時候,就回去"sys.path"中查詢,我們來看看"sys.path"輸出的啥

import sys


# ['F:\\Py3\\day1', 'F:\\Py3\\day1',
# 'F:\\pycharm\\PyCharm 2020.3.5\\plugins\\python\\helpers\\pycharm_display',
# 'F:\\Python36\\python36.zip', 'F:\\Python36\\DLLs',
# ......] print(sys.path)

發現是一個列表,裡面是很多的路徑,也就是說在記憶體空間和內建模組找不到的時候,就會檢視檔案的路徑,看看有沒有我們想要的。

雖然輸出了很多路徑,但是我們重點看的就是第一個,第一個其實就是執行檔案所在的路徑,我們尋找模組的時候只需要站在執行檔案的路徑檢視即可。

那如果兩個檔案不在同一目錄下,怎麼解決呢?來看:

方式一:直接新增"sys.path"路徑:

import sys

sys.path.append(r'F:\\Py3\\day1\\sss')
import asd

print(asd.name)

方式二:使用"from + ... + import + ..."句式直接指名道姓的新增:

from sss import asd
print(asd.name)

如果檔案有多個目錄,可以通過加點的方式進入下一層:

from sss.aaa.ddd import asd
print(asd.name)

4.絕對匯入與相當匯入

再匯入模組的時候,一切查詢模組的語句都是以執行檔案為準,無論匯入的句式是在執行檔案還是在被匯入檔案。

(1).絕對匯入:

按照檔案的目錄一層一層的往下尋找。

(2).相對匯入:

相對匯入打破了必須參照執行檔案的所在路徑的這一特性,只需要考慮當前模組所在的位置,然後使用特殊符號去查詢。

'''
. 表示當前路徑
.. 表示上一層路徑
../.. 表示上上一層路徑 

'''

5.包

包就是多個模組的結合體,也就是說內部存放了多個模組,但是呢包有一個共同的特點,那就是內部都含有"__init__.py"的檔案。

為什麼要有這個檔案的,那是因為在我們匯入包的時候,呼叫名字的時候,其實是在呼叫"__init__.py"裡面的名字,所以呢就有兩種方法:

(1).如果想直接通過包的名字使用包裡面的所有模組,那麼需要在"__init__.py"中提前匯入。

(2).如果嫌棄上述方法麻煩,也可以使用絕對匯入

6.軟體開發目錄規範

(1).bin資料夾:

存放程式的啟動檔案

(2).conf資料夾:

存放程式的配置檔案

(3).core資料夾:

存放程式的核心業務,也就是最為重要的程式碼

(4).lib資料夾:

存放程式的資料

(5).DB資料夾:

存放程式的資料

(6).log資料夾:

存放程式的日誌記錄

(7).readme資料夾:

存放程式的說明等其他的額外資訊

(8).requirements.txt文字檔案:

存放程式需要使用的第三方模組及對應的版本

這裡是IT小白陸祿緋,歡迎各位大佬的指點!!!