欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

day07课堂笔记

程序员文章站 2022-03-15 19:37:14
...

##1. 迭代器

1.1 迭代

通过迭代器不断取出可迭代对象中的下一个元素的值 的过程

for

1.2 可迭代对象

能能被迭代的对象

from collections import Utterable

isinstance(对象, Iterable)

实现 __iter__提供迭代器

1.3 迭代器

迭代的访问 可迭代对象中的下一个元素

应用场景: 用户只需要关心如何使用迭代器访问数据 而不需要关键数据该如何访问

​ 解耦合

​ 每一种可迭代对象都会提供对应的迭代器

from collections import Iterator

isinstance(对象,Iterator)

实现

__next__提供下一个元素的值

__iter__返回自身即可 应对情况 迭代器 = iter(迭代器)

1.4 next函数 iter函数

iter函数 迭代器 = iter(可迭代对象)

​ 取出可迭代对象中提供的迭代器

next函数 下一个元素的值 = next(迭代器)

​ 通过迭代器取出下一个元素的值

2. 生成器

是一种特殊的迭代器, 支持迭代器所有的操作

2.1. 生成器表达式

​ 列表推导式[] ——> ()

​ 优点: 节约资源, 不用占用大量空间

​ 在用户需要访问数据的时候 才延迟产生

2.2 生成器函数

​ 含有yield关键字的函数 不再是普通函数 而是生成器函数

2.3 yield关键字作用

1 执行到yield会暂停当前代码执行 将后面的值返回到调用生成器代码的地方
2 当前生成器代码再次执行时 直接从上次暂停的地方继续往下执行

##3. 协程

3.1 概念

​ 协程是 用户层面的多任务调度机制 数量可以几十万

​ 进程线程是操作系统层面的多任务机制 数量受操作系统的限制

了解greenlet / yield使用协程

掌握gevent模块的使用

###3.2 gevent模式

​ 创建启动协程 协程对象 = gevent.spawn(入口, 参数列表)

​ 等待协程完成 协程对象.join()

​ 等待多个协程完成 gevent.joinall()

​ 自动切换 from gevent import monkey; monkey.patch_all()

###3.3 多任务的选择

​ 资源消耗不关心 要求稳定 用户多进程

​ 资源消耗关心 多线程或者协程

​ 多任务的网络程序 建议优先使用协程

相关标签: 迭代器