一,生成器
-
生成器的核心:生成器的本质就是迭代器
-
迭代器是python自带的
-
生成器是程序员自己写的一种迭代器
-
-
在python中有三种方式来创建生成器:
-
基于函数编写
-
推导式方式编写
-
python内置函数或者模块提供(其实1,3两种本质上差不多,都是通过函数的形式生成,只不过1是自己写的生成器函数,3是python提供的生成器函数而已)
# def func():# print("这是一个函数")# return "函数"# func()def func(): print("这是一个生成器") yield "生成器"# 坑func() # 生成一个生成器print(func().__next__()) # 启动生成器print(func().__next__()) -
-
yield与return:
-
相同点:
-
都是返回内容
-
都可以返回多次(但是return写多个只会执行一个)
-
-
不同点:
-
return是终止函数,yield是暂停生成器
-
yield能够记录当前执行位置
-
-
-
一个yield对应一个next
def func(): msg = input("请输入内容") yield msg print("这是第二次启动") yield "生成器2" yield "生成器3" yield "生成器4"g = func()print(next(g))print(next(g))print(next(g))print(next(g)) -
可迭代对象,迭代器,生成器的区别:
-
可迭代对象:
-
优点:list,tuple,str 节省时间,取值方便,使用灵活(具有自己的方法)
-
缺点:大量消耗内存
-
-
迭代器:
-
优点:节省空间
-
缺点:不能直接查看值,使用不灵活,消耗时间,一次性,不可逆行
-
-
生成器:
-
优点:节省空间,人为定义
-
缺点:不能直接查看值,消耗时间,一次性,不可逆行
-
# 数据类型 #(pyhton3: range() | python2 :xrange()) 都是可迭代对象 __iter__()# 文件句柄是迭代器 __iter__() __next__()# 没有send方法就是一个迭代器,具有send方法的就是一个生成器
-
-
使用场景
-
当文件或容器中数据量较大时,建议使用生成器。
-
-
区别什么是迭代器,什么是生成器
-
迭代器的地址 :iterator
-
生成器的地址 :generator
-
-
-
yield 将可迭代对象一次性返回
-
yield from 将可迭代对象逐个返回
def func(): lst = [1,2,3,45,6] lst1 = ["alex","wusir","taibi","baoyuan"] yield from lst yield from lst1g = func()
-
二,推导式
-
-
普通循环
print([i for i in range(10)]) # list# print([变量 for循环])print({i for i in range(10)}) # set# print({变量 for循环})print({i: i+1 for i in range(10)}) # dict# print({键:值 for循环}) -
筛选模式
print([i for i in range(10) if i > 2]) # list# print([加工后的变量 for循环 加工条件])print({i for i in range(10) if i % 2 == 1}) # set# print({加工后的变量 for循环 加工条件})print({i: i+1 for i in range(10) if i % 2 == 0}) # dict# print({加工后的键:值 for循环 加工条件})
-
-
没有元组推导式。
-
生成器推导式
-
普通模式
tu = (i for i in range(10)) print((变量 for循环))
-
筛选模式
tu = (i for i in range(10) if i > 5)print((加工后的变量 for循环 加工条件))
-
三,内置函数Ⅰ
-
了解即可
-
type():运算字符串中的算数
-
eval():运行字符串中的代码
-
hash():区分可变和不可变数据类型
-
help():查看帮助信息
-
callable():查看对象是否可调用
-
float():查看浮点数
-
complex():复数
-
-
bin():十进制转二进制
-
oct():十进制转八进制
-
hex():十进制转十六进制
-
-
divmod(除数,被除数):(商,余)
-
round(小数,保留位数):保留小数位
-
-
pow():两个参数求幂
-
pow(2,2,3):两个参数求幂后的余
-
-
bytes(str,encoding="utf-8"):将字符串进行编码
-
ord():通过元素获取当前表位的序号
-
-
repr():查看数据的原生态
-
all():判断容器中的元素是否都为真
-
any():判断容器中的元素是否有一个为真
-
locals():查看当前空间变量
-
globals():查看全局空间变量
-
format():
-
-