程序员,没事多练练,

并发,并行编程,算法,设计模式,

这三个方面的知识点,没事就要多练练,基本功呀。

class MyIterator:
    def __init__(self, element):
        self.element = element

    def __iter__(self):
        return self

    def __next__(self):
        if self.element:
            return self.element.pop(0)
        else:
            raise StopIteration

itrtr = MyIterator([0, 1, 2, 3, 4])
print(next(itrtr))
print(next(itrtr))
print(next(itrtr))
print(next(itrtr))
print(next(itrtr))

print("===============")

def my_generator(n):
    while n:
        n -= 1
        yield n

for i in my_generator(3):
    print(i)

print("===============")
print(my_generator(5))
g = my_generator(4)
print(next(g))
print(next(g))
print(next(g))
print(next(g))

print("===============")

def complain_about(substring):
    print('Please talk to me!')
    try:
        while True:
            text = (yield )
            if substring in text:
                print('Oh no: I found a %s again!' % (substring))
    except GeneratorExit:
        print('OK, ok: I am quitting.')

c = complain_about('Ruby')
next(c)
c.send('Test data')
c.send('Some more random text')
c.send('Test data with Ruby somewhere in it')
c.send('Stop complaining about Ruby or else!')
c.close()

print("===============")

def coroutine(fn):
    def wrapper(*args, **kwargs):
        c = fn(*args, **kwargs)
        next(c)
        return c
    return wrapper

@coroutine
def complain_about2(substring):
    print('Please talk to me!')

    while True:
        text = (yield )
        if substring in text:
            print('Oh no: I found a %s again!' % (substring))

c = complain_about2('JavaScript')
c.send("hello")
c.send("Test data with JavaScript")
c.close()

输出:


===============

===============
<generator object my_generator at 0x0000000002631BA0>

===============
Please talk to me!
Oh no: I found a Ruby again!
Oh no: I found a Ruby again!
OK, ok: I am quitting.
===============
Please talk to me!
Oh no: I found a JavaScript again!

Process finished with exit code 

python:从迭代器,到生成器,再到协程的示例代码的更多相关文章

  1. python 列表表达式、生成器表达式和协程函数

    列表表达式.生成器表达式和协程函数 一.列表表达式: 常规方式示例: egg_list=[] for i in range(100): egg_list.append("egg%s" ...

  2. Python并发编程之从生成器使用入门协程(七)

    大家好,并发编程 进入第七篇. 从今天开始,我们将开始进入Python的难点,那就是协程. 为了写明白协程的知识点,我查阅了网上的很多相关资料.发现很难有一个讲得系统,讲得全面的文章,导致我们在学习的 ...

  3. python基础—迭代器、生成器

    python基础-迭代器.生成器 1 迭代器定义 迭代的意思是重复做一些事很多次,就像在循环中做的那样. 只要该对象可以实现__iter__方法,就可以进行迭代. 迭代对象调用__iter__方法会返 ...

  4. python之迭代器与生成器

    python之迭代器与生成器 可迭代 假如现在有一个列表,有一个int类型的12345.我们循环输出. list=[1,2,3,4,5] for i in list: print(i) for i i ...

  5. 洗礼灵魂,修炼python(90)-- 知识拾遗篇 —— 协程

    协程 1.定义 协程,顾名思义,程序协商着运行,并非像线程那样争抢着运行.协程又叫微线程,一种用户态轻量级线程.协程就是一个单线程(一个脚本运行的都是单线程) 协程拥有自己的寄存器上下文和栈.协程调度 ...

  6. Python、进程间通信、进程池、协程

    进程间通信 进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的. 进程队列queue 不同于线程queue,进程 ...

  7. (转)Python黑魔法 --- 异步IO( asyncio) 协程

    转自:http://www.jianshu.com/p/b5e347b3a17c?from=timeline Python黑魔法 --- 异步IO( asyncio) 协程 作者 人世间 关注 201 ...

  8. python并发编程-进程池线程池-协程-I/O模型-04

    目录 进程池线程池的使用***** 进程池/线程池的创建和提交回调 验证复用池子里的线程或进程 异步回调机制 通过闭包给回调函数添加额外参数(扩展) 协程*** 概念回顾(协程这里再理一下) 如何实现 ...

  9. Python并发实践_02_通过yield实现协程

    python中实现并发的方式有很多种,通过多进程并发可以真正利用多核资源,而多线程并发则实现了进程内资源的共享,然而Python中由于GIL的存在,多线程是没有办法真正实现多核资源的. 对于计算密集型 ...

随机推荐

  1. python 小程序,打印数字

    要求如下: 指定一个数字 x ,然后打印 1到x 的所有数字,并问是否继续打印,否退出程序,是就继续.再指定一个数字 y ,如果 y> x 就显示 x+1 到 y 的所有数字,y <= x ...

  2. VUE2.0 饿了吗视频学习笔记(三):VUE2.0取消了v-link

    https://gitee.com/1981633/vue_study.git 源码下载地址,随笔记动态更新中 写法如下 <div class="tab-item"> ...

  3. Javaweb学习笔记——(三)——————JavaScript基础&DOM基础

    day031.js的String对象 **创建String对象 ***var str = "abc"; **方法和属性(文档) ***属性 lenth:字符串的长度 ***方法 ( ...

  4. 20155335俞昆 《java程序设计》第八周总结

    2016-2017-2 <Java程序设计>第X周学习总结 ##认识NIO 在java中,输入与输出,基本上是以字节为单位进行的低层次处理,实际上多半是对字节数组中整个区块进行处理,对于d ...

  5. 开始学习tensorflow

    搭建神经网络: 准备数据 定义数据输入层 定义网络隐藏层和预测层 定义loss 表达式 选择optimizer使得loss 最小 import tensorflow as tf import nump ...

  6. SQL Server 2008“备份集中的数据库备份与现有的数据库不同”解决方法

    对于SQL Server 2008,有几个地方是要注意的,比方在还原数据库时,不像2000里边将数据库和文件区分的很细, 统一均为文件,这就使还原的数据库文件制定为. bak.那么想还原2000的数据 ...

  7. Java EE之Struts2-2.5配置

    开学以来,已经三周了.Java EE却不太走心,于是,这几日空杯心态,重新学习.复习了Java SE和Java Web开发技术,然后入手Struts2.为了使用最新版本的Structs2,我去官网下载 ...

  8. Flask最强攻略 - 跟DragonFire学Flask - 第六篇 Flask 中内置的 Session

    Flask中的Session非常的奇怪,他会将你的SessionID存放在客户端的Cookie中,使用起来也非常的奇怪 1. Flask 中 session 是需要 secret_key 的 from ...

  9. JS浮点数运算Bug的解决办法

    方法一:重写浮点运算的函数 //除法函数,用来得到精确的除法结果 //说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显.这个函数返回较为精确的除法结果. //调用:acc ...

  10. android okhttp的使用

    OkHttpClient client = new OkHttpClient(); String url = ""; Request request = new Request.B ...