python學習-Day18
阿新 • • 發佈:2022-03-25
目錄
今日內容詳細
模組
迴圈匯入問題
兩個檔案彼此匯入彼此
# 迴圈匯入的時候極有可能出現某個名字還沒有被建立就使用的情況導致報錯
如果確實需要迴圈匯入 那麼需要確保雙方使用的名字都必須'提前定義好'
(一錯再錯的辦法)
方式1:將匯入模組的句式寫在定義名字的下面
方式2:將匯入模組的句式寫在函式體程式碼內
判斷檔案型別
判斷檔案型別是作為模組檔案還是執行檔案
py檔案可以被分為兩種型別
1.執行檔案
2.被匯入檔案(模組)
內建變數 __ name __
''' 當__name__所在的檔案是執行檔案的時候 返回結果是__main__ 當__name__所在的檔案是被匯入檔案時候 返回結果是檔名(模組名) ''' # 可以藉助於__name__區分被匯入的程式碼和測試程式碼 if __name__ == '__main__': 當前檔案是執行檔案的時候才會執行的子程式碼塊 簡寫方式: 直接輸入main之後按tab鍵即可 # 常用於啟動指令碼中
模組的查詢順序
"""
1.先從記憶體空間中查詢
2.再從內建模組中查詢
3.最後去sys.path查詢(類似於我們前面學習的環境變數)
如果上述三個地方都找不到 那麼直接報錯!!!
"""
驗證先從記憶體空間中查詢
import md1
import time
time.sleep(15) # 睡眠期間將md1檔案刪除
print(md1.name)
驗證再從內建模組中查詢
import time
print(time)
print(time.time())
'''在建立py檔案時候一定不要跟內建或第三方的模組名產生衝突'''
驗證sys.path
import sys print(sys.path) # 結果是一個列表 裡面存放了很多路徑 # 記憶體中和內建中都沒有要查詢的模組時 就會去sys.path裡面的路徑中挨個查詢 ''' sys.path中雖然有很多路徑 但是隻需要重點關注第一個路徑,也就是執行檔案所在的路徑 查詢模組的時候只需要站在執行檔案所在的路徑檢視即可. '''
解決
主動新增sys.path路徑(類似於新增環境變數)
import sys
sys.path.append(r'/Users/qingqin1130/PycharmProjects/DayoneDay/aaa')
import mddd
print(mddd.name)
"""
pycharm會自動將專案目錄所在的路徑新增到sys.path中
"""
利用from...import...句式指名道姓的查詢
from aaa import mddd # 從資料夾aaa中匯入mddd模組
print(mddd.name)
from aaa.bbb.ccc import mm # 通過點的方式進入下一層目錄
print(mm.name)
絕對匯入與相當匯入
在匯入模組的時候,無論匯入的句式是在執行檔案中還是在被匯入檔案中,一切查詢模組的句式都是以執行檔案為準
絕對匯入
'''永遠按照執行檔案所在的路徑一層層往下查詢'''
相對匯入
相對匯入打破了必須參照執行檔案的所在路徑的要求,只需要考慮當前模組所在的路徑然後使用特殊符號' . '去查詢其他模組即可
from . import a
''' 相對匯入只能在被匯入檔案中使用 不能在執行檔案中使用'''
小知識
. 表示當前路徑
.. 表示上一層路徑
../.. 表示上上一層路徑
'''若想一勞永逸 那麼就只使用絕對匯入即可'''
包
概念
包就是一個含有__init__.py檔案的資料夾,資料夾內可以放置子模組或子包(內部存放了多個模組檔案)
注*
#1. 在python3中,即使包下沒有__init__.py檔案,import 包仍然不會報錯,而在python2中,包下一定要有該檔案,否則import 包會報錯
#2. 建立包的目的不是為了執行,而是被匯入使用,包只是模組的一種形式而已,包的本質就是一種模組
包的使用
首次匯入包(如import pool)同樣會做三件事:
1、執行包下的__init__.py檔案
2、產生一個新的名稱空間用於存放__init__.py執行過程中產生的名字
3、在當前執行檔案所在的名稱空間中得到一個名字--包名,該名字指向__init__.py的名稱空間,例如 pool.xxx和 pool.yyy中的xxx和yyy都是來自於 pool 下的__init__.py,也就是說匯入包時並不會匯入包下所有的子模組與子包
向包索要名字
"""
在匯入包的時候,索要名字其實是跟包裡面的__init__.py要
1.如果想直接通過包的名字使用包裡面所有的模組 那麼需要在__init__.py中提前匯入
上述方式的好處在於__init__可以提前幫你準備好可以使用的名字
2.也可以直接忽略__init__的存在使用絕對匯入即可
上述方式的好處在於不需要考慮包的存在 直接當成普通資料夾即可
"""
軟體開發目錄規範
# 我們實際工作中編寫的程式軟體都是有很多資料夾和檔案組成的
這些資料夾和檔案其實都有各自存在的意義和主要功能
"""
檢視檔名稱很多時候可以找到相同檔名的檔案
"""
bin資料夾
存放程式的啟動檔案 start.py
conf資料夾
存放程式的配置檔案 settings.py
core資料夾
存放程式的核心業務 src.py
就是最為重要的程式碼 能夠實現具體需求
lib資料夾
存放程式公共的功能 common.py
db資料夾
存放程式的資料 userinfo.txt
log資料夾
存放程式的日誌記錄 log.log
readme文字檔案
存放程式的說明、廣告等額外的資訊
requirements.txt文字檔案
存放程式需要使用的第三方模組及對應的版本