-
核心:生成器的本质就是一个迭代器
-
程序员自己写的一种迭代器
-
-
-
生成器可以使用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() -- 查看当前空间的变量
-