python 12 生成器 列表推导式 内置函数I
-
今日内容大纲
-
毒鸡汤课
坚持努力。
-
生成器
- yield
- yield return
- yield from
-
生成器表达式,列表推导式
-
内置函数 I
-
-
昨日内容回顾作业讲解
- 可迭代对象:
- 可以更新迭代的实实在在值。
- 内部含有
'__iter__'
方法的。 - str list tuple dict set range
- 优点:操作方法多,操作灵活,直观,
- 缺点:占用内存。
- 迭代器:
- 可以更新迭代的一个工具(数据结构)。
- 内部含有
'__iter__'且含有__next__方法的
的。 - 文件句柄。
- 优点:节省内存。惰性机制。
- 缺点:不直观,速度相对慢,操作方法单一,不走回头。
- 格式化输出。
- 函数名的应用。
- 默认参数可变的数据类型坑。作用域的坑。
- 可迭代对象:
-
今日内容
-
生成器
- 生成器:python社区,生成器与迭代器看成是一种。生成器的本质就是迭代器。唯一的区别:生成器是我们自己用python代码构建的数据结构。迭代器都是提供的,或者转化得来的。
- 获取生成器的三种方式:
- 生成器函数。
- 生成器表达式。
- python内部提供的一些。
- 获取生成器的三种方式:
- 生成器函数获得生成器:
函数 def func(): print(111) print(222) return 3 ret = func() print(ret) 生成器函数 def func(): print(111) print(222) yield 3 a = 1 b = 2 c = a + b print(c) yield 4 ret = func() # print(ret) print(next(ret)) print(next(ret)) print(next(ret)) 一个next 对应一个yield
生成器一个next 对应一个yield
-
yield return
return:函数中只存在一个return结束函数,并且给函数的执行者返回值。
yield:只要函数中有yield那么它就是生成器函数而不是函数了。生成器函数中可以存在多个yield,yield不会结束生成器函数,一个yield对应一个next。 -
吃包子练习题:
def func(): l1 = [] for i in range(1,5001): l1.append(f'{i}号包子') return l1 ret = func() print(ret) def gen_func(): for i in range(1,5001): yield f'{i}号包子' ret = gen_func() # [3号包子.] for i in range(200): print(next(ret)) for i in range(200): print(next(ret))
-
yield from:将l1这个列表变成了迭代器返回。
def func(): l1 = [1, 2, 3, 4, 5] yield l1 ret = func() print(next(ret)) def func(): l1 = [1, 2, 3, 4, 5] yield from l1 ''' yield 1 yield 2 yield 3 yield 4 yield 5 ''' 将l1这个列表变成了迭代器返回。 ret = func() print(next(ret)) print(next(ret)) print(next(ret)) print(next(ret)) print(next(ret))
- 生成器:python社区,生成器与迭代器看成是一种。生成器的本质就是迭代器。唯一的区别:生成器是我们自己用python代码构建的数据结构。迭代器都是提供的,或者转化得来的。
-
生成器表达式,列表推导式
-
用一行代码构建一个比较复杂有规律的列表。
-
列表推导式:
- 循环模式:[变量(加工后的变量) for 变量 in iterable]
- 筛选模式:[变量(加工后的变量) for 变量 in iterable if 条件]
-
循环模式讲解
练习题:
-
生成器表达式:
与列表推导式的写法几乎一模一样,也有筛选模式,循环模式,多层循环构建。写法上只有一个不同: [] 换成 (). 生成器表达式打印出来是一个地址
-
总结:
# 列表推导式: # 缺点: # 1,有毒。列表推导式只能构建比较复杂并且有规律的列表。 不要太着迷。 # 2,超过三层循环才能构建成功的,就不建议用列表推导式。 # 3,查找错误(debug模式)不行。 # 优点: # 一行构建,简单。 # 装逼。
-
# 字典推导式(了解) # # lst1 = ['jay', 'jj', 'meet'] # # lst2 = ['周杰伦','林俊杰','元宝'] # # dic = { lst2[i]: lst1[i] for i in range(len(lst1))} # # print(dic)
-
-
内置函数 I
-
-
今日总结
- 生成器:***
- 生成器函数 yield
- yield与return 区别。yield from
- 列表推导式,生成器表达式。 ***
- 内置函数:今天讲的内置函数,了解。
-
预习内容
- lambda表达式。
- 内置函数 II.
- 闭包。