生成器
- 
- 
生成器 - 
yield 
- 
yield return 
- 
yield from 
 
- 
- 
生成器表达式,列表推导式 
- 
内置函数 I 
 
- 
- 
昨日内容回顾作业讲解 - 
可迭代对象: - 
可以更新迭代的实实在在值。 
- 
内部含有 '__iter__'方法的。
- 
str list tuple dict set range 
- 
优点:操作方法多,操作灵活,直观, 
- 
缺点:占用内存。 
 
- 
- 
迭代器: - 
可以更新迭代的一个工具(数据结构)。 
- 
内部含有 '__iter__'``且含有__next__方法的的。
- 
文件句柄。 
- 
优点:节省内存。惰性机制。 
- 
缺点:不直观,速度相对慢,操作方法单一,不走回头。 
 
- 
- 
格式化输出。 
- 
函数名的应用。 
- 
默认参数可变的数据类型坑。作用域的坑。 
 
- 
- 
今日内容 - 
生成器 - 
生成器:python社区,生成器与迭代器看成是一种。生成器的本质就是迭代器。唯一的区别:生成器是我们自己用python代码构建的数据结构。迭代器都是提供的,或者转化得来的。 - 
获取生成器的三种方式: - 
生成器函数。 
- 
生成器表达式。 
- 
python内部提供的一些。 
 
- 
 
- 
- 
生成器函数获得生成器: 
 1 函数 2 def func(): 3 print(111) 4 print(222) 5 return 3 6 ret = func() 7 print(ret) 8  9 生成器函数 10 def func(): 11 print(111) 12 print(222) 13 yield 3 14 a = 1 15 b = 2 16 c = a + b 17 print(c) 18 yield 4 19 ret = func() 20 # print(ret) 21 print(next(ret)) 22 print(next(ret)) 23 print(next(ret)) 24 一个next 对应一个yield 25  - 
yield return return:函数中只存在一个return结束函数,并且给函数的执行者返回值。 yield:只要函数中有yield那么它就是生成器函数而不是函数了。生成器函数中可以存在多个yield,yield不会结束生成器函数,一个yield对应一个next。 
- 
吃包子练习题: 1 def func(): 2 l1 = [] 3 for i in range(1,5001): 4 l1.append(f'{i}号包子') 5 return l1 6 ret = func() 7 print(ret) 8  9 def gen_func(): 10 for i in range(1,5001): 11 yield f'{i}号包子' 12 ret = gen_func() 13 # [3号包子.] 14 for i in range(200): 15 print(next(ret)) 16  17 for i in range(200): 18 print(next(ret)) 19  
- 
yield from 1 def func(): 2 l1 = [1, 2, 3, 4, 5] 3 yield l1 4 ret = func() 5 print(next(ret)) 6  7  8  9 def func(): 10 l1 = [1, 2, 3, 4, 5] 11 yield from l1 12 ''' 13 yield 1 14 yield 2 15 yield 3 16 yield 4 17 yield 5 18 ''' 19 将l1这个列表变成了迭代器返回。 20 ret = func() 21 print(next(ret)) 22 print(next(ret)) 23 print(next(ret)) 24 print(next(ret)) 25 print(next(ret)) 26  
 
- 
- 
生成器表达式,列表推导式 - 
用一行代码构建一个比较复杂有规律的列表。 
- 
列表推导式: - 
循环模式:[变量(加工后的变量) for 变量 in iterable] 
- 
筛选模式:[变量(加工后的变量) for 变量 in iterable if 条件] 
 
- 
- 
循环模式讲解 练习题: 
 
- 
- 
内置函数 I 
 
- 
- 
今日总结 - 
生成器:*** 
- 
生成器函数 yield 
- 
yield与return 区别。yield from 
- 
列表推导式,生成器表达式。 *** 
- 
内置函数:今天讲的内置函数,了解。 
 
- 
- 
- 
预习内容 - 
lambda表达式。 
- 
内置函数 II. 
- 
闭包。 
 
- 
 
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号