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

软件定位|软件的基本功能

  • 运行代码的方法:安装环境、启动命令等...
  • 简要的使用说明
  • 代码目录结构说明,更详细点的说明软件的基本原理
  • 常见问题说明
posted @ 2020-12-10 22:40  drrug  阅读(96)  评论(0编辑  收藏  举报