1. 程式人生 > 其它 >1.1計算機網路的概念和功能及發展階段

1.1計算機網路的概念和功能及發展階段

python模組

模組迴圈匯入問題

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

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

判斷檔案型別

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

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

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

#importby.py

if __name__ =='__main__':
    print '>>>>>>>1'
if __name__ =="importby":
    print '>>>>>>>2'
直接執行importby.py,結果如下:

>>>>>>>1

#import.py

import importby
執行import.py,結果如下:

>>>>>>>2

模組查詢順序

"""
1.先從記憶體空間中查詢
2.再從內建模組中查詢
3.最後去sys.path查詢(類似於我們前面學習的環境變數)
如果上述三個地方都找不到 那麼直接報錯!!!
"""
# 1.驗證先從記憶體空間中查詢
import md1
import time
time.sleep(15)  # 睡眠期間將md1檔案刪除
print(md1.name)
# 2.驗證再從內建模組中查詢
import time
print(time)
print(time.time())
"""在建立py檔案時候一定不要跟模組名(內建、第三方)衝突!!!"""
# 3.驗證sys.path(類似於我們前面學習的環境變數)
 import sys
 print(sys.path)  # 結果是一個列表 裡面存放了很多路徑

'當記憶體中和內建中都沒有要查詢的模組時 就會去下面的路徑中挨個查詢'

['E:\\PyCharm 2021.2.3\\jbr\\bin\\E\\PycharmProjects\\pythonProject2', 'E:\\PyCharm 2021.2.3\\jbr\\bin\\E\\PycharmProjects\\pythonProject2', 'E:\\PyCharm 2021.2.3\\plugins\\python\\helpers\\pycharm_display',
...
]
#總結:
sys.path中雖然有很多路徑 但是隻需要重點關注第一個
第一個其實就是執行檔案所在的路徑
查詢模組的時候只需要站在執行檔案所在的路徑檢視即可

# 如何解決
# 方式1:主動新增sys.path路徑(類似於新增環境變數)
 import sys
 sys.path.append()	#新增所在檔案路徑
 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)

絕對匯入與相當匯入

絕對匯入的格式為 import A.B 或 from A import B,
相對匯入格式為 from . import B 或 from ..A import B,
.代表當前模組,..代表上層模組,...代表上上層模組,依次類推。
# 絕對匯入
	永遠按照執行檔案所在的路徑一層層往下查詢(無腦查詢即可)
# 相對匯入
相對匯入可以避免硬編碼帶來的維護問題,例如我們改了某一頂層包的名,那麼其子包所有的匯入就都不能用了。但是存在相對匯入語句的模組,不能直接執行,否則會有異常:

如果是絕對匯入,一個模組只能匯入自身的子模組或和它的頂層模組同級別的模組及其子模,

如果是相對匯入,一個模組必須有包結構且只能匯入它的頂層模組內部的模組所以,如果一個模組被直接執行,則它自己為頂層模組,不存在層次結構,所以找不到其他的相對路徑,所以如果直接執行python xx.py ,而xx.py有相對匯入就會報錯

#程式碼示例:

#  絕對匯入
import sys, os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)

#  相對匯入:

import sys, os
from . import models
from ..proj import settings

"""
絕對匯入必須依據執行檔案所在的資料夾路徑為準
絕對匯入無論在執行檔案中還是被匯入檔案都適用
 相對匯入
    .代表的當前路徑
    ..代表的上一級路徑
    ...代表的是上上一級路徑

    相對匯入不能再執行檔案中使用
    相對匯入只能在被匯入的模組中使用,使用相對匯入 就不需要考慮
    執行檔案到底是誰 只需要知道模組與模組之間路徑關係
"""

# 從專業的角度來解釋的話
	包就是內部含有__init__.py的資料夾
# 從實際的角度來解釋的話
	包就是多個模組的結合體(內部存放了多個模組檔案)
  	eg:我們的電腦某個資料夾下面有很多不同型別的檔案
      	視訊檔案、音訊檔案、文字檔案、圖片檔案
       為了方便管理我們會習慣性的建立不同的資料夾分類管理
    
#定義包主要有兩步:
1.建立一個資料夾,該資料夾的名字就是該包的包名
2在該資料夾內新增一個 __init__.py 檔案即可

#程式碼示例:

# 匯入fk_package包,實際上就是匯入包下__init__.py檔案
import fk_package
# 匯入fk_package包下的print_shape模組,
# 實際上就是匯入fk_package目錄下的print_shape.py
import fk_package.print_shape
# 實際上就是匯入fk_package包(模組)匯入print_shape模組
from fk_package import billing
# 匯入fk_package包下的arithmetic_chart模組,
# 實際上就是匯入fk_package目錄下的arithmetic_chart.py
import fk_package.arithmetic_chart

軟體開發目錄規範

# 我們實際工作中編寫的程式軟體都是有很多資料夾和檔案組成的
	這些資料夾和檔案其實都有各自存在的意義和主要功能
"""
課下可以看看自己電腦上下載過的軟體所在的位置 
檢視檔名稱很多時候可以找到相同檔名的檔案
"""
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:目錄的名字可以不一致 但是主要的思想是一致的
  	就是為了便於管理 解耦合...
拿到啟動檔案之後直接執行即可 無需考慮程式內部的複雜程度 便於管理