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
  • 相关阅读:
    数据库连接池
    JDBC事务
    oracle 11g
    python自动化办公1-os模块学习
    python模块学习1
    requests-post请求
    linux学习二-目录文件相关命令
    Linux学习一常见的7个命令及命令的信息查看
    python-文件操作
    异常以及异常处理
  • 原文地址:https://www.cnblogs.com/wjlv/p/11669615.html
Copyright © 2011-2022 走看看