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內容

軟體定位|軟體的基本功能

  • 運行程式碼的方法:安裝環境、啟動命令等…
  • 簡要的使用說明
  • 程式碼目錄結構說明,更詳細點的說明軟體的基本原理
  • 常見問題說明