zoukankan      html  css  js  c++  java
  • 生成器表达式(待补充)

    yield表达式形式应用的定义
    在一个生成器函数内,将yield赋值给一个变量,这就是yield的表达式形式,也叫生成器的表达式形式
    
    send方法定义
    yield的表达式形式下面有一个send方法,它的作用和next方法是一样的,都是在触发函数继续往下走,除了具有next功能外,还有传值的效果,send传
    值的方式是先把要传的值交给yield,再由yield赋值给事先定义的变量名,最后才触发next效果
    
    def foo():
        print('start')
        while True:
            x=yield
            print('value:',x)
    
    g=foo()#得到生成器
    
    next(g)#初始化生成器
    打印'start',但此时函数位置已经在yield暂停了
    g.send(None)#把None传给yield,相当于不传值,只有next效果,等同于next(生成器变量),一般用于生成器表达式的初始化操作
    
    g.send(1)#由send现将1传给上一次yield暂停的位置,再由yield把1赋值给x,最后函数在接着往下走,直到碰到yield函数才暂停
    
    
    yield表达式形式的初始化
    定义
    生成器一定要走到一个暂停的位置,然后才能send传值,因为send的特性是基于一个已经暂停的yield进行传值然后再接着往下走
    如果对生成器表达式形式不进行初始化操作而直接进行传值则会报以下错误
    TypeError: can't send non-None value to a just-started generator
    类型错误:不能将非零值发送给刚刚启动的生成器
    解决方法:必须先初始化才能传值,初始化只有两个方法
    send(None)给生成器表达式或next(g)
  • 相关阅读:
    android architecture
    java求解两个字符串之间的编辑距离
    URL和URI的区别
    java源码解析之qdox
    java中Random实现原理
    java中ThreadLocal入门
    java中多线程之Future入门
    java中类加载器入门
    java中正则表达式的group用法
    java反射调用main方法踩坑
  • 原文地址:https://www.cnblogs.com/z-x-y/p/9112546.html
Copyright © 2011-2022 走看看