模块
名称空间的嵌套关系是在定义阶段就固定死的,与调用位置无关
生成器表达式:res=(i for i in range(10) if i>5)
1.import 模块
什么是模块? 模块就是功能的集合体
模块的四个通用类别:
使用python编写的.py文件
把一系列模块组织到一起的文件夹
已被编译为共享或DLL的c或c++扩展
使用C编写并连接到python解释器的内置莫模块
模块的三种来源
内置模块
第三方模块
自定义模块
为什么要用模块?
1.使用内置或第三方模块的好处:极大提升开发效率
2.使用自定义模块的好处:将程序部分组件公用的功能提取到一个模块,其他组件通过调用方式使用该模块,目的是减少代码冗余
怎么使用模块? 先定义后使用
首次导入模块会发生的三件事情:
1.产生一个模块的名称空间
2.执行.py的文件内容,将产生的名字丢到模块的名称空间内
3..spam在当前执行文件中,拿到一个名字,改名字指向模块的名称空间
之后的导入引用首次导入成功的
调用 spam.money
导入模块时候 可以其别名 import spam as s
import 的优缺点:
优点:引用模块中的名字必须加前缀(模块名.),指名道姓的问某一个空间要名字,不会与当 前名称空间中的名字冲突
缺点:引用模块中的名字必须加前缀(模块名.),不够简洁
2.from 模块 import 功能
1.产生一个模块的名称空间
2.执行spam.py的文件内容,将产生的名字丢到模块的名称空间内
3.在当前执行文件中拿到read1,该名字直接指向模块的名称空间中的read1
from import的优缺点
优点:引用模块中的名字不加前缀(模块名.),比较简洁
缺点:容易与当前执行文件名称空间中的名字冲突
from spam import *
3.模块的搜索路径及环境变量sys.path的设置
1.内存
2.内置模块
3.sys.path依次查找 (是以执行文件为准)
查找模块路径优先级:内存->内置->硬盘
4.区分python的两种用途_name_
当文件被当做执行文件时_name_的值为_main_
当文件被当做模块导入时_name_的值为模块名
def f1():
print('f1')
def f2():
print('f2')
if _name_ == _main_:
f1()
f2()
5.软件开发的目录规范
1.把项目根目录加到环境变量
2.应该把项目根目录所在的绝对路径,然后加到环境变量
3.
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
项目名
bin 文件启动目录(环境变量基准)
start
conf 配置文件
settings
lib 自定义模块(与业务无关)
core 核心逻辑代码(业务)
src
db 数据库文件
log 日志文件
Readme 文件(介绍)