生成器函数 推导式 生成器表达式

1.生成器:

生成器的本质就是迭代器

生成器的特点和迭代器是一样的,获取方式和迭代器一样(__next__(), send(): 给上一个yield传值).

生成器一般是由生成器函数或者生成器表达式来创建

其实就是手写迭代器

def func():
    print("娃哈哈")
    yield 1 # return和yield都可以返回数据
    print("呵呵呵")
gen = func() # 不会执行你的函数. 拿到的是生成器

  

函数中如果有yield 这个函数就是生成器函数. 生成器函数() 获取的是生成器. 这个时候不执行函数
yield: 相当于return 可以返回数据. 但是yield不会彻底中断函数. 分段执行函数.
gen.__next__() 执行函数. 执行到下一个yield.
gen.__next__()  继续执行函数到下一个yield.

  

生成器函数
和普通函数没有区别. 里面有yield的函数就是生成器函数.
生成器函数在执行的时候. 默认不会执行函数体. 返回生成器
通过生成器的__next__()分段执行这个函数.
send() 给上一个yield传值, 不能再开头(没有上一个yield), 最后一个yield也不可以用send()

扫描二维码关注公众号,回复: 2744009 查看本文章

  

2.推导式!!!

列表推导式    [结果 for循环 条件筛选]

列表推导式    打出py1-py15期
lst = {"python"+str(j) for j in range(1,15)}
print(lst)

字典推导式    {k:v for循环 条件筛选}

[11,22,33,44] => {0:11,1:22,2:33}
lst = [11,22,33,44]
dic = {i:lst[i] for i in range(len(lst)) if i < 2} # 字典推导式就一行
print(dic)
语法:{k:v for循环 条件筛选}

  

集合推导式    k for循环 条件}

简单去重   他是一个集合
lst = [1,2,3,1,2,2,3,3,]
s = set(lst)
print(s)
集合推导式
lst = [1,2,3,1,2,2,3,3,]
# s = {el for el in lst}
# print(s)

  

生成器表达式
(结果 for循环 条件)
特点:
1. 惰性机制
2. 只能向前
3. 节省内存(鸡蛋)

猜你喜欢

转载自www.cnblogs.com/xihuanniya/p/9469467.html