zoukankan      html  css  js  c++  java
  • yield和send

    前面已经说过yield的作用:

    1、类似于return每次返回一个值

    2、代码块(函数)暂停在yield的位置,下次调用时继续执行yield之后和之前的代码块

    3、通过next(f)获取到yield的返回值

    send的作用其实和yield类似:

    1、类似于return每次返回一个值

    2、代码块(函数)暂停在yield的位置,下次调用时继续执行yield之后和之前的代码块

    3、send(x)可以理解为next(x),也就是把send的结果当做yield的返回值给next来获取

    有点拗口,下面直接看例子:

    def c():
        n = 0
        while n < 2:
            n += 1
            print('...',n)
            s = yield n
            print(s)
        return 'done'
    
    a = c()
    for i in range(8):
        try:
            print(next(a))
        except StopIteration as e:
            print(e)
            break

    执行结果:

    ... 1
    1
    None
    ... 2
    2
    None
    done

    再看个例子:

    for i in range(8):
        try:
            if i == 1:
                a.send(8)  # send(x)等同于吧yield之后和之前的代码执行一遍,并返回x的值给next(a)
                print(next(a))  # 这里会继续调用next,继续执行yield之后的代码直到yield
            else:
                print(next(a))
        except StopIteration as e:
            print(e)
            break

    执行结果:

    ... 1
    1
    8
    ... 2
    None
    done
  • 相关阅读:
    托管代码和非托管代码效率的对比
    托管程序与非托管程序的区别
    第15章 C# ADO.NET数据库操作
    第14章 C#进程与线程
    第13章 C#异常与调试
    第12章 C# WinForm
    第11章 C#委托和事件
    第10章 C#文件操作
    第9章 C#泛型
    第8章 C#集合
  • 原文地址:https://www.cnblogs.com/wjlv/p/11669615.html
Copyright © 2011-2022 走看看