1、首页,认识一下可迭代,迭代器和生成器python
可迭代,如:list,dict,tuple,deque等都是可迭代对象;编程
验证,须要借助collections.abc这个模块(python2中没有)使用isinstance()来类别一个对象是不是可迭代的(Iterable),是不是迭代器(Iterator),是不是生成器(Generator)多线程
代码以下:import collections函数
from collections.abc import Iterable.Iterator.Generator线程
#字符串orm
ast="xiaoming"协程
print("字符串:{}".format(ast))对象
print(isinstarnce(ast,Iterable))生命周期
print(isinstance(ast,Iterator))字符串
print(isinstance(alist,Generator))
#列表
alist=[21,24,12,32,19]
print(isinstarnce(alist,Iterable))
print(isinstance(alist,Iterator))
print(isinstance(alist,Generator))
#字典
adict={"name":"王华","gender":"男","age":18}
print(isinstarnce(adict,Iterable))
print(isinstance(adict,Iterator))
print(isinstance(adict,Generator))
#deque
adeque=collections.deque("adbdef")
print("字符串:{}".format(adeque))
print(isinstarnce(adeque,Iterable))
print(isinstance(adeque,Iterator))
print(isinstance(adeque,Generator))
扩展知识:
可迭代对象,是其内部实现了,__iter__这个魔术方法。能够经过,dir()方法来查看是否有__iter__来判断一个变量是不是可迭代的;
迭代器:
对比可迭代对象,迭代器其实就是多了一个函数而已。就是__next__(),咱们能够再也不使用for循环来间断获取元素值。而是能够直接使用next()方法来实现。
迭代器是在可迭代的基础上实现的。要建立一个迭代器,咱们首先得有一个可迭代对象。
**重点:生成器
生成器的概念是在python2.2中首次出现,之因此引入生成器的概念是为了实现一个在计算下一个值时不须要浪费空间的结构。生成器是在迭代器的基础上(可以使用for循环能够使用next())再实现了yield。
yield是什么东西呢,它至关于咱们函数里的return,在每次next()或者for遍历的时候都会yield这里将新的值返回回去,并在这里阻塞,等待下一次的调用。正是因为这样的机制,才使用生成器在python编程中大放异彩;
生成器的生命周期:
gen_creaated #等待开始执行
gen_running #解释器正在执行(只有多线程应用中才能看到这个状态)
gen_suspended #在yield表达式处暂停
gen_closed #执行结束
**协程
协程是为非抢占式多任务产生子程序的计算机程序组件,协程容许不一样入口点在不一样位置暂停或者开始执行程序。
协程经过使用yield暂停生成器,能够将程序的执行流程交给其余的子程序,从而实现不一样子程序的之间的交替执行。