- 
核心:生成器的本质就是一个迭代器 - 
程序员自己写的一种迭代器 
 
- 
- 
- 
生成器可以使用for进行遍历 
- 
生成器编写方式: - 
基于函数编写 - 
def func(): print('这是一个函数') return '函数'func()
- 
def func(): print('这是一个函数') yield '函数'func() #生成生成器print(func()) #获取到的是一个生成器的内存地址print(func()._next_()) #生成一个生成器,启动一个生成器
- 
函数体中出现yield代表要声明一个生成器(generator) 
- 
一个yield对应一个next() 
 
- 
- 
推导式方式编写 
 
- 
- 
yield 和return的区别: - 
相同同点: - 
都是返回内容 
- 
都可以返回多次,但是return会终止函数,只执行一个 
 
- 
- 
不同点: - 
return 终止函数,yield 是暂停生成器 
- 
yield 能记录当前执行位置 
 
- 
 
- 
- 
三者总结: - 
可迭代对象:str list tuple - 
优点:节省空间,取值方便,使用灵活(具有自己的私有方法) 
- 
缺点:大量消耗内存 
 
- 
- 
迭代器: - 
优点:节省空间 
- 
缺点:不能直接查看值,使用不灵活,消耗时间,一次性,不可逆行 
 
- 
- 
生成器: - 
优点:节省空间,认为定义 
- 
缺点:不能直接查看值,消耗时间,一次性,不可逆 
 
- 
 
- 
- 
使用场景:当文件或内容数据较大时,建议使用生成器 
- 
文件句柄本质上是一个迭代器 
- 
python 2中的xrange()与python 3中的range()一样,都是可迭代对象 - 
xrange()返回的是列表,range返回的是迭代对象(range本身) 
 
- 
- 
迭代器(iterator) 生成器(generator) - 
没有send()方法的时迭代器,有send()方法的就是一个生成器 - 
send()-- 发送,具有启动( _next_())和发送两个功能
- 
第一次使用send()时括号中内容必须是None 
 
- 
 
- 
- 
yield from 将可迭代对象的元素逐个返回;yield是一次性返回- 
for i in 迭代器
 
- 
推导式
- 
列表推导式 - 
print([i for i in range(10)])
- 
print([i for i in range(10) if i%2==0])
 
- 
- 
集合推导式 - 
print{i for i in range(10)}
- 
print({i for i in range(10) if i%2==0})
 
- 
- 
字典推导式: - 
print({i:i+1 for i in range(10)})
- 
print({i:i+1 for i in range(10) if i%2==0})
 
- 
- 
生成器推导式:(面试题) - 
print((i for i in range(10)))
- 
print((i for i in range(10) if i>5))
 
- 
内置函数一
一带而过的
- 
all() any() bytes() callable() chr() complex() divmod() eval() exec() format() frozenset() globals() hash() help() id() input() int() iter() locals() next() oct() ord() pow() repr() round()
- 
禁止使用 - 
eval() -- 神器一 
- 
exec() -- 神器二 
 
- 
- 
hash() -- 就是区分可变数据类型和不可变数据类型 
- 
help() -- 查看帮助信息 
- 
callable() -- 查看对象是否可调用 
- 
float() -- 转换为浮点数 
- 
complex() -- 复数 
- 
bin() -- 十进制转二进制 
- 
oct() -- 十进制转八进制 
- 
hex() -- 十进制转十六进制 
- 
divmod() -- 求(商,余),返回元组 
- 
round(3.5312,2) -- 保留小数位 
- 
pow(2,2) -- 求幂 - 
pow(2,2,3) -- 求幂后的余 
 
- 
- 
print(bytes('你好',encoding=’utf-8))--将字符串编码
- 
ord('b') -- 通过元素获取当前表位的序号 
- 
chr(98) -- 通过表位序号查找元素 
- 
repr() -- 查看数据的原生态(给程序员使用) 
- 
print() -- 给用户使用的 
- 
all() -- 判断容器中的元素是否都是真 
- 
any() -- 判断容器中的元素是否有一个为真 
- 
globals() -- 查看全局的变量,返回的是字典 
- 
locals() -- 查看当前空间的变量 
-