10.15 迭代器,生成器到常用模块的小结

闭包函数

把函数和变量一起打包拿出去了

装饰器

不改变函数体代码,并且不改变函数调用方式,他本质就是一个函数
装饰器也可以完善装饰器

三层装饰器

迭代器

迭代器对象一定是可迭代对象,可迭代对象不一定是迭代器对象

可迭代对象

具有__iter__方法的对象(python中一切皆对象)

迭代器对象

具有__iter____next__方法的对象

三元表达式

列表推导式

字典生成式

生成器

自定义的迭代器,有yield关键字的函数只要调用,这个调用后的函数就是生成器

yield

接收函数的返回值,但是会继续执行函数代码

return

接收函数返回值,但是会终止函数

递归

本质上就是函数调用函数本身,必须得有结束条件,并且在递归的过程中,问题的规模必须不断缩小

匿名函数

匿名函数使用一次就失效了,一般不单独使用,与max最大值/min最小值/sorted排序/map映射/filter过滤连用

内置函数

面向过程编程

类似于工厂的流水线,机械式的一步一步完成一个项目,把完成步骤具体细分,这样步骤与步骤之间互不干涉
优点:条理清晰
缺点:扩展性差,只要一个步骤错,项目就崩溃

模块的四种形式

为什么要有模块

让代码变得更加简洁,清晰,模块化
一个模块里有多个函数,相当于一个大功能细分成多个小功能

  1. 自定义模块
  2. 第三方模块
  3. 内置模块

import和from...import

import time
1.打开time文件
2.使用python解释器运行time文件,然后把解释文件得到的名字放入time模块的名称空间
3.test.py中会有一个time的变量指向time模块的名称空间,如果导入方式为`import time as t`,则就是t变量指向time模块的名称空间

from time import sleep
1.打开time文件
2.使用python解释器运行time文件,然后把解释文件得到的名字放入time模块的名称空间
3.test.py中会有一个sleep变量指向time模块名称空间中的sleep,如果导入方式为`from time import sleep,localtime`,则是由一个sleep变量和一个localtime变量指向time模块的名称空间中的sleep和localtime.

循环导入问题

为什么会有循环导入问题

  1. m1文件需要导入m2文件的y
  2. m2文件需要导入m1文件的x
  3. 代码自上而下运行,m1需要m2的y,然后会去m2的名称空间找到y,但是找y前,需要运行m2的代码,m2的代码第一句是去m1找x,然后又回去运行m1的代码,m1的第一行代码又是去m2找y
  4. 就是说m1只能运行第一行,m2也只能运行第一行,所以出现了循环导入问题

解决方案一

把导入文件的代码放到最后面
但是这样需要对所有变量都这样做,才能解决问题,所以治标不治本

解决方案二

把导入文件写入函数中
名字的执行顺序:内置(python解释器启动的时候)→全局(文件执行的时候)→局部(函数调用的时候)
借助执行顺序,可以避免循环导入问题

模块的搜索路径

内存→内置模块→环境变量

python文件的两种途径

  1. 文件模块,被当做模块给导入,有多个
  2. 运行文件,被当做执行文件执行,只能有一个

.搜索路径以执行文件为准

## m1.py
def f1():
	print('f1')
f1()

## test.py
import m1
m1.f1() #会运行两次

__name__

## m1.py
def f1():
	print('f1')

if __name__ == '__main__': # __name__在m1.py文件被当做模块导入时是模块名,做为执行文件时是'__main__`
	f1()
	
## test.py
import m1

m1.f1() #会运行两次

编译python文件(了解)

为了提高加载模块的速度(提高的是加载速度,不是运行速度)

模块太大,合理分配模块的函数
所以得用文件夹管理,文件夹命名为m1,导入m1就是导入m1中的__init__

软件开发目录规范

为了提高 程序的可读性和可维护性,我们应该为软件设计良好的目录结构,这与规范的编码风格同等重要,简而言之就是把软件代码分文件目录.

time模块

打印三种不同形式的时间,时间戳/格式化时间/结构化时间

datetime模块

时间的加减

random模块

随机数

os模块

与操作系统交互,多用于文件操作

sys模块

与python解释器交互,多用于环境变量的配置

json模块

序列化

把数据从内存读入硬盘(以json格式)

反序列化

把数据从硬盘读入内存(以json格式)

平台性质

可以跨平台可以序列化dict/list/int/float/bool/None数据类型

pickle模块

序列化

把数据从内存读入硬盘(以pickle格式,二进制形式)

反序列化

把数据从硬盘读入内存(以pickle格式,二进制形式)

平台性质

无法跨平台,但是可以序列化python的任意数据类型

hashlib模块

加密

hmac模块

加盐加密

logging模块

日志模块

步骤

创建logger对象
创建handler对象
创建formatter对象
把formatter绑定到handler对象上
把handler对象绑定到logger对象上
设置级别
测试

numpy模块

多维数组的运算

pandas模块

处理表格/json文件等,数据库

matplotlib模块

数据可视化

re模块

正则表达式,从文本中匹配特定的内容

typing模块

导入python的数据类型

collections模块

是python内建的一个集合模块,提供了许多有用的集合类

pathlib模块(了解)

是python的内置库

shutil模块(了解)

文件的压缩与解压缩,文件的拷贝

xml模块(了解)

类似于json模块,做不同程序间的数据交互

subprocess模块(了解)

运行子程序,即运行linux命令

posted @ 2019-10-15 20:54  断指轩辕  阅读(102)  评论(0编辑  收藏  举报