天天看點

python-子產品入門二(子產品循環導入,區分python檔案的兩種用途,子產品搜尋路徑,軟體開發的目錄規範)

一、子產品的循環導入問題

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 #說明文檔

目錄後繼會繼續補充!

焚膏油以繼晷,恒兀兀以窮年。