day013|python之模組02&目錄01
1 from…import
1.1 概念
1.1.1 首次導入模組會發生的事
- 會觸發模組的運行,產生一個模組的名稱空間
- 將運行模組文件過程中產生的名字丟到模組額名稱空間
- 在當前名稱空間產生一個名字money,該名字指向名稱空間中那個money
1.2 應用
1.2.1 模組spam
# spam.py
print("from the spam.py")
money = 1000
def change():
global money
money = 0
print(money)
def func1():
print("----->%s" % money)
def func2():
print('=====>')
func1()
1.2.2 導入模組
from spam import money
print(money) # 1000
money = 20000
print(money) # 20000
from spam import money as m
print(m) # 1000
from spam import money,func1,change
print(money) # 1000
func1() # ----->1000
change() # 0
from spam import money,func1,change
money = 200000
def func1():
print(money)
func1() # 200000
1.3 優缺點
1.3.1 優點
- 無需加前綴,程式碼更為簡潔
1.3.2 缺點
- 容易與當前名稱空間中的名字衝突
1.4 *
from spam import *
print(money)
print(func1)
print(func2)
print(change)
2 循環導入問題
2.1 情景一
2.1.1 m1
print('running m1')
from m2 import y
x = 'm1'
2.1.2 m2
print('running m2')
from m1 import x
y = 'm2'
2.1.3 run
import m1
m1()
會報錯,因為循環導入時沒有取到值
2.2 補救措施1
2.2.1 m1
print('running m1')
def f1():
from m2 import y
print(y)
x = 'm1'
2.2.2 m2
print('running m2')
def f2():
from m1 import x
print(x)
y = 'm2'
2.2.3 run
import m1
m1.f1()
2.3 補救措施2
2.3.1 m1
print('running m1')
x = 'm1'
from m2 import y
2.3.2 m2
print('running m2')
y = 'm2'
from m1 import x
2.3.3 run
import m1
m1()
3 區分文件與模組的方式
def f1():
print('from f1')
def f2():
print('from f2')
if __name__ == '__main__':
f1()
f2()
import m1
4 模組搜索優先順序
查找位置優先順序
1、記憶體
2、內置模組
3、sys.path
import sys
print(sys.path)
import time
import m1
time.sleep(10)
import m1
# 然後迅速將m1文件刪除
m1.f1() # 本次m1會執行,因為記憶體中有快取。下一次就會報錯
import sys
sys.path.append(r'H:\PycharmProjects\python_new\day013\程式碼\01from import')
import spam
spam.func1()
5 ATM
5.1 目錄
api–>存放介面文件,介面用於為主要業務邏輯提供數據操作
api.py–>應用程式編程介面
bin–>整個項目的啟動文件放置在這個文件夾中
start.py–>啟動軟體入口
conf–>整個項目的配置文件放置在這個文件夾
settings.py–>配置文件,如存放一些固定的路徑
core–>整個項目的核心文件
src.py–>核心業務邏輯程式碼(第一層:用戶視圖層:核心業務邏輯程式碼)
db–>用於存放數據文件與操作數據的程式碼文件
db_file–>db.txt …
db_handler.py–>操作數據的程式碼(第三層:數據處理層)
interface–>用於存放用戶介面
user_interface.py–>第二層(用戶介面)
lib–>項目的第三方包,共享的一些庫
common–>存放公共的功能,如存放裝飾器
log–>用於存放項目的日誌文件
log.txt–>存放日誌的文件
README.txt–>整個項目的說明文件,項目需求和大致流程,相當於產品說明書
5.2 README.txt內容
軟體定位|軟體的基本功能
- 運行程式碼的方法:安裝環境、啟動命令等…
- 簡要的使用說明
- 程式碼目錄結構說明,更詳細點的說明軟體的基本原理
- 常見問題說明