今日内容
生成器
推导式
内置函数一
生成器
什么是生成器?生成器的本质就是一个迭代器
-
迭代器是python自带的
-
生成器是程序员自己写的一种迭代器
生成器编写方式:
-
1.基于函数编写
-
2.推导式方式编写
def func(): print('这是一个函数') return '函数'func()def func(): print("这是一个生成器") yield '生成器'# 坑!!!,其实这个生成器只能执行一个next,因为只有一个yieldfunc() # 生成一个生成器print(func().__next__()) # 启动生成器print(func().__next__())# 上方这句代码的意思是:创建一个生成器并且执行一个next方法,两句一样但互不相干
函数体中出现yield代表要声明一个生成器
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)) # 不能超过yield次数
yield和return的区别
相同点:
-
都是返回内容
-
都可以返回多次,但是return写多个只会执行一个
不同点:
-
return终止函数 yield是暂停生成器
-
yield能够记录当前执行位置
一个yield对应一个next
生成器的作用
# 生成器的作用是节省空间# 可迭代对象:# 优点: list,tuple,str 节省时间,取值方便,使用灵活(具有自己私有方法)# 缺点: 大量消耗内存# 迭代器:# 优点:节省空间# 缺点:不能直接查看值,使用不灵活,消耗时间,一次性,不可逆行# 生成器:# 优点:节省空间,人为定义# 缺点:不能直接查看值,消耗时间,一次性,不可逆行# 使用场景:# 1.当文件或容器中数据量较大时,建议使用生成器# 数据类型 (pyhton3: range() | python2 :xrange()) 都是可迭代对象 __iter__()# 文件句柄是迭代器 __iter__() __next__()没有send方法就是一个迭代器,具有send方法的就是一个生成器
def func(): lst = [1,2,3,45,6] lst1 = ["alex","wusir","taibi","baoyuan"] yield from lst yield from lst1# yield 将可迭代对象一次性返回# yield from 将可迭代对象逐个返回g = func()for i in g: print(i)
推导式
列表推导式:
普通循环print([i for i in range(10)])print([变量 for循环])筛选lst = []print([i for i in range(10) if i % 2 == 0])print([i for i in range(10) if i > 2])[操作后的变量 for循环 判断操作]
集合推导式:
普通循环print({i for i in range(10)}){变量 for循环}筛选print({i for i in range(10) if i % 2 == 1}){操作后的变量 for循环 操作}
字典推导式:
普通循环print({i: i+1 for i in range(10)}){键:值 for循环}筛选模式print({i:i+1 for i in range(10) if i % 2 == 0}){操作的键:值 for循环 操作}
生成器推导式:
普通模式tu = (i for i in range(10))(变量 for循环)筛选模式tu = (i for i in range(10) if i > 5)(操作后的变量 for循环 操作)
内置函数一
all() 判断容器中的元素是否都为真any() 判断容器中的元素是否有一个为真bytes() 将字符串进行编码callable() 查看对象是否可 调用 == ()chr() 通过表位序号查找元素complex() 复数eval() 神器一exec() 神器二 神器禁止使用frozenset() 冻结集合globals() 查看全局空间变量hash() 区分可变数据类型和不可变数据类型help() 查看帮助信息id() 查看内存地址locals() 查看当前空间变量oct() 十进制转八进制ord() 通过元素获取当前unicode表位的序号pow() 幂,两个参数是求幂,三个参数时求幂后在取余repr() 查看数据的原生态round() 保留小数位divmod() 求商和余bin() 十进制转二进制