1 from…import
1.1 概念
1.1.1 首次导入模块会发生的事
- 会触发模块的运行,产生一个模块的名称空间
- 将运行模块文件过程中产生的名字丢到模块额名称空间
- 在当前名称空间产生一个名字money,该名字指向名称空间中那个money
1.2 应用
1.2.1 模块spam
# spam.pyprint("from the spam.py")money = 1000def change():global moneymoney = 0print(money)def func1():print("----->%s" % money)def func2():print(\'=====>\')func1()
1.2.2 导入模块
from spam import moneyprint(money) # 1000money = 20000print(money) # 20000from spam import money as mprint(m) # 1000from spam import money,func1,changeprint(money) # 1000func1() # ----->1000change() # 0from spam import money,func1,changemoney = 200000def 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 yx = \'m1\'
2.1.2 m2
print(\'running m2\')from m1 import xy = \'m2\'
2.1.3 run
import m1m1()
会报错,因为循环导入时没有取到值
2.2 补救措施1
2.2.1 m1
print(\'running m1\')def f1():from m2 import yprint(y)x = \'m1\'
2.2.2 m2
print(\'running m2\')def f2():from m1 import xprint(x)y = \'m2\'
2.2.3 run
import m1m1.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 m1m1()
3 区分文件与模块的方式
def f1():print(\'from f1\')def f2():print(\'from f2\')if __name__ == \'__main__\':f1()f2()
import m1
4 模块搜索优先级
查找位置优先级1、内存2、内置模块3、sys.pathimport sysprint(sys.path)import timeimport m1time.sleep(10)import m1# 然后迅速将m1文件删除m1.f1() # 本次m1会执行,因为内存中有缓存。下一次就会报错import syssys.path.append(r\'H:\\PycharmProjects\\python_new\\day013\\代码\\01from import\')import spamspam.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内容
软件定位|软件的基本功能
- 运行代码的方法:安装环境、启动命令等…
- 简要的使用说明
- 代码目录结构说明,更详细点的说明软件的基本原理
- 常见问题说明