1. 程式人生 > 其它 >模組與軟體開發目錄

模組與軟體開發目錄

迴圈匯入問題

# 兩個檔案彼此匯入彼此
	迴圈匯入的時候極有可能出現某個名字還沒有被建立就使用的情況導致報錯
"""在以後的程式設計生涯中 儘量去避免出現迴圈匯入的問題"""

如果確實需要迴圈匯入 那麼需要確保雙方使用的名字都必須'提前定義好'
	(一錯再錯的辦法)
  方式1:將匯入模組的句式寫在定義名字的下面
  方式2:將匯入模組的句式寫在函式體程式碼內

判斷檔案型別

py檔案可以被分為兩種型別
	1.執行檔案
    2.被匯入檔案

有一個內建變數__name__
	當__name__所在的檔案是執行檔案的時候 結果是__main__
  當__name__所在的檔案是被匯入檔案時候 結果是檔名(模組名)

可以藉助於__name__區分被匯入的程式碼和測試程式碼
if __name__ == '__main__':
  	當前檔案是執行檔案的時候才會執行的子程式碼塊
   
"""
由於上述程式碼在很多啟動指令碼中經常使用 所以有簡寫方式
直接輸入main之後按tab鍵即可
"""

模組的查詢順序

"""
1.先從記憶體空間中查詢
2.再從內建模組中查詢
3.最後去sys.path查詢(類似於我們前面學習的環境變數)
如果上述三個地方都找不到 那麼直接報錯!!!
"""

"""強調:在建立py檔案時候一定不要跟模組名(內建、第三方)衝突!!!"""

"""
驗證sys.path:結果是一個列表 裡面存放了很多路徑
當記憶體中和內建中都沒有要查詢的模組時 就會去下面的路徑中挨個查詢 結果是一個列表 裡面存放了很多路徑
['/Users/jiboyuan/PycharmProjects/day18', 
'/Users/jiboyuan/PycharmProjects/day18', 
'/Applications/PyCharm.app/Contents/plugins/python/helpers/pycharm_display', 
'/Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip'
...
] 
"""
# import mddd
"""
sys.path中雖然有很多路徑 但是隻需要重點關注第一個
第一個其實就是執行檔案所在的路徑
###############################################################
    查詢模組的時候只需要站在執行檔案所在的路徑檢視即可
###############################################################
"""
# 如何解決
# 方式1:主動新增sys.path路徑(類似於新增環境變數)
# import sys
# sys.path.append(r'/Users/jiboyuan/PycharmProjects/day18/aaa')
# import mddd
# print(mddd.name)
"""
pycharm會自動將專案目錄所在的路徑新增到sys.path中
"""
# 方式2:利用from...import...句式指名道姓的查詢
# from aaa import mddd  # 從資料夾aaa中匯入mddd模組
# print(mddd.name)
# from aaa.bbb.ccc import mm  # 通過點的方式進入下一層目錄
# print(mm.name)

絕對匯入與相當匯入

1.在匯入模組的時候一切查詢模組的句式都是以執行檔案為準
	無論匯入的句式是在執行檔案中還是在被匯入檔案中!!!
  
# 絕對匯入
	永遠按照執行檔案所在的路徑一層層往下查詢(無腦查詢即可)
# 相對匯入
	相當匯入打破了必須參照執行檔案的所在路徑的要求 只需要考慮當前模組所在的路徑然後使用特殊符號.去查詢其他模組即可
  from . import a
  相對匯入只能在被匯入檔案中使用 不能在執行檔案中使用
"""
預備知識
	.表示當前路徑
	..表示上一層路徑
	../..表示上上一層路徑
"""
'''以後如果想一勞永逸 那麼就只使用絕對匯入即可'''

# 從專業的角度來解釋的話
	包就是內部含有__init__.py的資料夾
# 從實際的角度來解釋的話
	包就是多個模組的結合體(內部存放了多個模組檔案)
  	eg:我們的電腦某個資料夾下面有很多不同型別的檔案
      	視訊檔案、音訊檔案、文字檔案、圖片檔案
       為了方便管理我們會習慣性的建立不同的資料夾分類管理
      	學習視訊
        	J老師視訊合集
          R老師視訊合集
          C老師視訊合集
        學習筆記
        	D老師經典語錄
          A老師經典語錄
        ...
# 在pycharm中甚至直接提供了建立包的選項
	本質就是資料夾裡面有一個__init__.py檔案

"""
在匯入包的時候 索要名字其實是跟包裡面的__init__.py要
	1.如果想直接通過包的名字使用包裡面所有的模組 那麼需要在__init__.py中提前匯入
		上述方式的好處在於__init__可以提前幫你準備好可以使用的名字
		
	2.也可以直接忽略__init__的存在使用絕對匯入即可
		上述方式的好處在於不需要考慮包的存在 直接當成普通資料夾即可
"""
包裡面的__init__可以看成是你的管家 
你可以吩咐它幫你做事 也可以直接架空它自己動手

程式設計思想演變

1.小白階段
	此階段寫程式碼就是在一個檔案內不停地堆疊程式碼的行數(麵條版本)
  
2.函式階段
	此階段寫程式碼我們學會了將一些特定功能的程式碼封裝到函式中供後續反覆呼叫

3.模組階段
	此階段不單單是將功能程式碼封裝成函式,並且將相似的程式碼功能拆分到不同的py檔案中便於後續的管理
"""
為什麼如此演變???
	eg:我們可以現象成使用電腦的過程
		小白階段相當於在C盤下直接存取各種型別的檔案
		函式階段相當於在C盤下建立資料夾管理檔案
		模組階段相對於考慮效能在不同的盤下存檔不同的資料
答案:更加方便、快捷、高效的管理資源
"""

軟體開發目錄規範

# 我們實際工作中編寫的程式軟體都是有很多資料夾和檔案組成的
	這些資料夾和檔案其實都有各自存在的意義和主要功能
"""
課下可以看看自己電腦上下載過的軟體所在的位置 
檢視檔名稱很多時候可以找到相同檔名的檔案
"""
1.bin資料夾
	存放程式的啟動檔案		start.py
2.conf資料夾
	存放程式的配置檔案   settings.py
3.core資料夾
	存放程式的核心業務   src.py
  	就是最為重要的程式碼 能夠實現具體需求
4.lib資料夾
	存放程式公共的功能   common.py
5.db資料夾
	存放程式的資料				userinfo.txt
6.log資料夾
	存放程式的日誌記錄		log.log
7.readme文字檔案
	存放程式的說明、廣告等額外的資訊
8.requirements.txt文字檔案
	存放程式需要使用的第三方模組及對應的版本
  
  
ps:目錄的名字可以不一致 但是主要的思想是一致的
  	就是為了便於管理 解耦合...
拿到啟動檔案之後直接執行即可 無需考慮程式內部的複雜程度 便於管理
當代碼越來越多的時候 你才能體會到拆分的好處!!!