• 2019年1月2日 生产者消费者模型 元旦快乐


    enumerate 用法:对序列做下标

    l=['q','s','d']
    for i in enumerate(l,start=2):
        print (i)
    for x,y in enumerate(l,start=5):
        print(x,y)

    (2, 'q')
    (3, 's')
    (4, 'd')
    5 q
    6 s
    7 d

    yield 和 send 特性

    def test():
        print("a")
        re=yield 1 # 1 代表的是return 1,可以不填,则返回none;re代表的是函数中的局部变量
        print('b',re)
        yield 2
        print("c")
        yield 3
    
    #yield 相当于return,控制的是函数的返回值
    #yield 另一个特性,接收send传递过来的值,赋值给x
    
    t=test() #拿到了生成器函数,但是并未运行,是否为生成器函数解释器通过yield自动判别
    res=t.__next__()
    print('_next_方法:',res)
    res2=t.send('I am value')#send和next的执行很像,只是send可以和生成器互动,传入一个值,将需要传递对值,传递上一个yield
    print('send方法:',res2)
    res3=next(t)
    print('next函数方法:',res3)

    第1个人,吃了包子1
    第2个人,吃了包子2
    第3个人,吃了包子3
    第4个人,吃了包子4
    第5个人,吃了包子5
    a
    _next_方法: 1
    b I am value
    send方法: 2
    c
    next函数方法: 3

    import time
    
    baozi=['包子%s'%(i+1) for i in range(5)] #生产包子
    def customer (res):
        #吃包子顾客
        for index,bz in enumerate(res,start=1):
            time.sleep(0.1)
            print('第%s个人,吃了%s'%(index,bz))#吃包子
    customer(baozi)
    
    
    #并行方法吃包子,单线程内并发
    
    def ch(name):
        print('我是%s,我要吃包子'%name)
        while True:
            bz=yield
            time.sleep(0.2)
            print("%s吃的是%s"%(name,bz))
    
    def chibaozi(name,xian):
        c1 = ch(name)
        c1.__next__()
        for i in range(10):
            time.sleep(0.2)
            c1.send(xian+"%s"%i) #send 传递给上面的yield
    
    chibaozi("sxj",'肉包')

    第1个人,吃了包子1
    第2个人,吃了包子2
    第3个人,吃了包子3
    第4个人,吃了包子4
    第5个人,吃了包子5
    我是sxj,我要吃包子
    sxj吃的是肉包0
    sxj吃的是肉包1
    sxj吃的是肉包2
    sxj吃的是肉包3
    sxj吃的是肉包4
    sxj吃的是肉包5
    sxj吃的是肉包6
    sxj吃的是肉包7
    sxj吃的是肉包8
    sxj吃的是肉包9

  • 相关阅读:
    【xinsir】githook之precommit分享
    node进程一些信号的意义
    ES6篇
    Webpack4篇
    Node篇
    Vuex篇
    WebStorage篇
    HTML5篇
    html5语义化标签大全
    emmet语法
  • 原文地址:https://www.cnblogs.com/python1988/p/10205909.html
Copyright © 2020-2023  润新知