python程序开发模块化_python-17-Python文件两种用途、模块化程序开发
--------------------------------python文件的兩種用途----------------------------------
py文件的兩種用途:
1、直接運行
print(__name__)
當文件被當作腳本直接執行時,__name__值為"__main__"
2、被當作模塊導入
print(__name__)
當文件被當作模塊導入時,__name__值為"模塊名"
if __name__ == '__main__':
print("文件被當作腳本執行時要做的事情")
f1()
f2()
----------------------------------模塊的搜索所路徑與查找優先級----------------------------------
一:模塊的搜索路徑與查找優先級
(1) 先從內存中已經導入的模塊里找
import mmm
mmm.f1()
import time
time.sleep(15)
print('='*50)
import mmm
mmm.f1()
(2) 然后再查找內置的模塊
查看解釋器內置的模塊
import sys
print(sys.modules)
查看解釋器的環境變量
import sys
print(sys.path)
當前執行文件所在的文件夾
import logging
print(logging)
(3) 最后去sys.path列表中存放的多個文件夾里依次檢索
append方式是臨時加一個python的環境變量
示例1:
import sys
print(sys.path)
sys.path.append(r'D:\python全棧15期\aaa\bbb')
import ccc
ccc.f1()
示例2:
import sys
print(sys.path)
import aaa.bbb.ccc as c
c.f1()
from aaa.bbb import ccc
ccc.f1()
主文件 是程序執行的入口
最先從 當前執行程序所在的文件夾下面找,也即從 內存開始找, 優先級最高
劃分文件是為了方便管理
運行時 這些劃分出去的文件,都是在主文件中運行的
后續文件 所參考的環境變量 都參考主文件所在的文件路徑
所及需要手動添加整個項目的根目錄路徑,以便能找到 項目中下屬的所有文件
----------------------------------避免循環導入(涉及遞歸調用)----------------------------------
破壞 循環導入(循環導入:互相等待對方手中的資源):一方先主動給出自己手中的值
如此便需要調整 本模塊中的值 和調用語句之間的順序
最佳解決方案: 涉及循環導入的 ,把導入語句放到函數中取
因為在外部調用函數時,調用模塊中的所有名字都已經完成了賦值,可以直接取用
m1.py文件代碼-------------
print('正在導入m1')
def f1():
from m2 import y
print(x,y)
x='m1'
m2.py文件代碼--------------
print('正在導入m2')
def f2():
from m1 import x
print(x,y)
y='m2'
run.py文件代碼------------
x=1
# import m1
# print(m1.x)
# print(m1.y)
# m1.f1()
import m2
m2.f2()
----------------------------------------模塊化程序開發--------------------------------------
package(包) 其實就是文件夾
壓縮包和文件的作用一樣,都能用來存放文件
查看解釋器的環境變量
import sys
print(sys.path)
# ['E:\\workplace_python', 'E:\\workplace_python', 'E:\\ruanjian\\Python\\Python36\\python36.zip', 'E:\\ruanjian\\Python\\Python36\\DLLs', 'E:\\ruanjian\\Python\\Python36\\lib', 'E:\\ruanjian\\Python\\Python36', 'E:\\ruanjian\\Python\\Python36\\lib\\site-packages']
# 工作臺的路徑 也被自動加入到python路徑中
用戶名寫到 環境變量,在程序的任何位置都能使用
python中的兩大環境變量
sys.path:到模塊
os.environ 【這其實是一個字典】 存儲想要給全局看的數據,在程序的任何位置都能看到 比如 用戶名這種信息
拓展:
windows系統中的環境變量:在window系統中,全局有效,快速找值
python中的環境變量:在python程序中,全局生效,快速找值
獲取當前 文件/文件夾 所在的文件夾的路徑
import os
__file__ 當前文件的路徑(帶文件名)
print(__file__) # D:\python全棧15期\day17\ATM\conf\settings.py
BASE_DIR = os.path.dirname(os.path.dirname(__file__)) # D:\python全棧15期\day17\ATM\
# 獲取當前 文件/文件夾 所在的文件夾的路徑
導入模塊的兩種方式及其區別:
1、import xxx
在當前路徑下 (查找)導入 xxx
2、from xxx import xxx
在當前路徑下 從 xxx文件夾 (查找)導入xxxx
強調:被調用文件 在未明確指明路徑的情況下,使用的路徑 參照的都是 主文件的路徑
日志使用:
每執行一個操作,都調用了記錄日志的方法,將進行的操作行為,寫入日志
-----------------------------------補充----------------------------------
名稱空間相關強調:
定義的時候 名稱空間中 就已經有這個名字(變量名、函數名等各種名字)了,順序執行程序的時候才為這些 名字依次賦值
(只有被賦值的名字才能被使用。沒有被賦值的名字不能被使用,否則程序報錯)
掃描語法 中的主要做法:只掃描目標空間中有沒有這個名字
執行過程 中的主要做法:若這些用到的名字 沒有被賦值,則使用時報錯
C語言中的變量機制 與 python中的變量機制有很大不同,要區別看待,不可進行相同處理
python中重視 綁定 , 即 名 和 值 放在不同的內存空間中,通過綁定起來進行取值
全局名稱空間 其實也就是 文件級的名稱空間(一個.py文件執行時,創建一個自己的全局名稱空間)
程序中只有一個內置的名字空間
在它之下可有多個全局名字空間
平衡 ,以XXX換XXX,時間換空間、復雜性與效率性
文件路徑(文件所在的路徑,帶自己的名字)
文件夾路徑(文件/文件夾 本身所在的文件夾的路徑,不帶自己的名字)
import os : os是 程序 與 操作系統 交互的模塊
調用操作系統os提供的功能
import sys: sys是 程序 與 解釋器 交互的模塊
調用python解釋器提供的功能
總結
以上是生活随笔為你收集整理的python程序开发模块化_python-17-Python文件两种用途、模块化程序开发的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 鸡油的功效与作用、禁忌和食用方法
 - 下一篇: python3.7.2怎么使用win7_