zoukankan      html  css  js  c++  java
  • Python并发编程理解yield from、协程

    一、首页,认识一下可迭代,迭代器和生成器

    可迭代,如:list,dict,tuple,deque等都是可迭代对象;

    验证,需要借助collections.abc这个模块(python2中没有)使用isinstance()来类别一个对象是否是可迭代的(Iterable),是否是迭代器(Iterator),是否是生成器(Generator)

    代码如下:import collections

           from collections.abc import Iterable.Iterator.Generator

    #字符串

    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暂停生成器,可以将程序的执行流程交给其他的子程序,从而实现不同子程序的之间的交替执行。

  • 相关阅读:
    “显示桌面”代码
    Jquery 判断CheckBox是否选中
    Jquery 得到隐藏列的值
    Jquery 得到DataGrid单击单元格后得到主键列值
    RadioButtonList的项增加onClick事件
    正则表达式 替换除中文、字母、数字以外的字符
    正则表达式中 中文 Unicode字符(转)
    Jquery 设置table、DataGrid等的某列单击的方法
    GridView自动生成列的隐藏
    AutoCAD利用VB交互创建应用程序交互
  • 原文地址:https://www.cnblogs.com/wwwcf1982603555/p/9081537.html
Copyright © 2011-2022 走看看