一、子產品的循環導入問題
run.py
# import m1 # 第一次導入
m1.py
# 錯誤示範
'''
print('正在導入m1')
from m2 import y #第一次導入m2
x='m1'
'''
m2.py
# 錯誤示範
'''
print('正在導入m2')
from m1 import x
y='m2'
'''
解決方案:
一:把循環導入的語句放到名字定義的後面
# m1.py
# y='m2'
# from m1 import x
# m2.py
# print('正在導入m2')
#
# y='m2'
# from m1 import x
二:将循環導入的語句放到函數内
# m1.py
print('正在導入m1')
def f1():
from m2 import y,f2 #第一次導入m2
print('m1.f1---->y: ',y)
f2()
x='m1'
# m2.py
def f2():
from m1 import x
print('m2.f2--->x: ',x)
y='m2'
二、區分python檔案的兩種用途
當檔案被執行時__name__=='__main__'
當檔案被導入時__name__=='子產品名'
if __name__ == '__main__':
f1()
f2()
三、子產品的搜尋路徑
子產品搜尋路徑的優先級:1.記憶體中已經加載過的,2.内置子產品,3.sys.path第一個值是目前執行檔案所在的檔案夾
環境變量是以目前執行檔案為準的.
注: 所有被導入的子產品參照環境變量sys.path都是以執行檔案為準的.被導入的子產品再去導入其它子產品,也是參照sys.path
四、絕對導入與相對導入
絕對導入:以執行檔案的sys.path為起始位置開始導入,稱之為絕對導入
優點:執行檔案與被導入的子產品中都可以用
缺點:所有導入都是以sys.path為起始點,導入麻煩
相對導入:
符号:一個"."代表目前所在檔案夾,".."代表上一級檔案夾,"..."代表上一級的上一級檔案夾
優點:導入更加簡單
缺點:隻能在導入包中的子產品時才能使用,不能在執行檔案中使用
注意: 執行檔案中隻能用絕對導入
五、軟體開發的目錄規範
規範化的目錄結構能更好的控制程式,讓程式具有更高的可讀性
1.可讀性高 2.可維護性高
通常一個項目都會有的目錄如下:
項目名/
| -- bin/ #程式啟動腳本/程式入口
| | -- start.py
|
| -- conf/ #配置檔案
| | --settings.py
| -- core/ #業務邏輯
| | --src.py
| -- db/
| | --資料庫檔案
| -- lib/ #第三方庫
| | --common.py
| -- log/ #日志
| | --transaction.log
README #說明文檔
目錄後繼會繼續補充!
焚膏油以繼晷,恒兀兀以窮年。