Discuss / Python / 各位同学,像下面这样写会不会更容易理解些

各位同学,像下面这样写会不会更容易理解些

Topic source

团长王三

#1 Created at ... [Delete] [Delete and Lock User]

刚刚开始了解python,如果有些概念性错误请指出。

def consumer():
    # 一旦外部调用send(None)方法,就会执行此函数,遇到第一个yield就会停止
    r = 'Waiting for food...'

    while True:
        # 第一次遇到yield的时候,r被初始化为"waiting for food...",此时r被传出。
        # 但是导致第一次yield执行的send传入值(None)并没有机会接收到。此处的n等着下一次被send方法传入
        n = yield r
        if n:
            print('[CONSUMER] Consuming %s...' % n)
            r = 'Consumed'
        else:
            print 'None' #此案例中,这句永远不会被执行到,因为外部的send(None)是启动时传入的,此函数内部并没有任何机会接收它

def produce(c):

    # 启动协程。此处Python规定只能传入None,原因是协程刚刚启动,而传入值只能在某次yield被调用之后才可以使用
    r = c.send(None)

    #此处应收到传出的"waiting for food..."
    print('[PRODUCER] Consumer return: %s' % r)

    n = 0
    while n < 5:
        n = n + 1
        print('[PRODUCER] Producing %s...' % n)
        r = c.send(n)
        print('[PRODUCER] Consumer return: %s' % r)
    c.close()

c = consumer()
produce(c)

运行结果: [PRODUCER] Consumer return: Waiting for food... [PRODUCER] Producing 1... [CONSUMER] Consuming 1... [PRODUCER] Consumer return: Consumed [PRODUCER] Producing 2... [CONSUMER] Consuming 2... [PRODUCER] Consumer return: Consumed [PRODUCER] Producing 3... [CONSUMER] Consuming 3... [PRODUCER] Consumer return: Consumed [PRODUCER] Producing 4... [CONSUMER] Consuming 4... [PRODUCER] Consumer return: Consumed [PRODUCER] Producing 5... [CONSUMER] Consuming 5... [PRODUCER] Consumer return: Consumed


  • 1

Reply