一.生成器表达式
语法跟列表生成式一样,只不过列表生成式,是放在中括号内,生成器表达式是放在小括号内
g=(i for i in range(10) if i > 5) print(g) print(next(g))
二.模块
1.什么是模块:模块就是一系列功能的集合体
2.模块分为四个通用的类别:
1 使用python编写的.py文件
2 已被编译为共享库或DLL的C或C++扩展
3 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)
4 使用C编写并链接到python解释器的内置模块
3.模块的来源:
1. 内置模块
2.第三方模块
3.自定义模块:将程序各部分组件共用的功能提取取出放到一个模块里,其他的组件通过导入的方式使用该模块,该模块即自定义的模块
其中内置模块和第三方模块都是别人写好的,直接用就可以了
4.为何要用模块
内置模块和第三方模块可以直接使用,提升开发的效率,自定义模块可以减少代码冗余
5.如何用模块
1.import 模块名
首次导入模块的三个阶段:
1.产生一个模块的名称空间
2.执行.py文件中的内容,将产生的名字存放到模块的名称空间中
3.在当前的执行文件中存放着模块名,该模块名指向了模块的名称空间
之后的导入直接使用首次导入的结果即可。
使用import导入模块的优缺点:
优点:不会与当前执行文件的名称空间中的名字发生冲突
缺点:引用模块中的名字必须加前缀(模块名.)
import spam as sm #改模块名 print(sm.money) import n1,n2,n3 #导入多个模块
2.from.....import.....
首次导入模块的三个阶段:
1.产生一个模块的名称空间
2.执行.py文件中的内容,将产生的名字存放到模块的名称空间中
3.在当前的执行文件中拿到的名字,指向了模块的名称空间中相对应的名字
之后的导入直接使用首次导入的结果即可。
使用from.....import.....导入模块的优缺点:
优点:容易与当前执行文件的名称空间中的名字发生冲突
优点:引用模块中的名字不需要加前缀,直接使用即可
from spam import money as m #改money的名字 print(m) from spam import * #把spam模块中所有的名字都导入进去 print(read1) print(money) print(read2)
6.模块的搜索路径
查找模块路径的优先级:1.内存 2.内置模块 3.sys.path(环境变量):它是以当前执行文件所在的文件夹为准的
7.如何区分python文件的两种用途
def f1(): print('f1') def f2(): print('f2') if __name__ == '__main__': f1() f2() # print(__name__) # 当文件被当作执行文件执行时__name__的值为__main__ # 当文件被当作模块导入时__name__的值为模块名
三.软件开发的目录规范
bin文件夹中写的是一些启动文件;
conf文件夹中写的是一些配置文件;
lib文件夹中写的是一些自定义模块;
core文件夹中写的是一些程序的核心功能;
db文件夹中写的是一些数据;
log文件夹中写的是一些日志文件;
Readme文件夹中写的是一些使用说明。