zoukankan      html  css  js  c++  java
  • 生成器

    只要函数体内有yield,执行该函数体代码时就不会执行函数体代码,会得到一个结果,该结果就是生成器(generator

    def func():
        print('=================>1')
        yield 1
        print('=================>2')
        yield 2
        print('=================>3')
        yield 3
        print('=================>4')
        yield 4
    func()

    该函数执行结果如下所示:

    生成器就是迭代器

    def func():
        print('=================>1')
        yield 1
        print('=================>2')
        yield 2
        print('=================>3')
        yield 3
        print('=================>4')
        yield 4
    #生成器就是迭代器 
    
    x=func()
    next(x)
    next(x)
    next(x)
    next(x)
    
    

     yield的功能

    1   yield为我们提供一种自定义迭代器对象的方法

    2   yield与return的区别

        2.1yield可以返回多次值

        2.2函数暂停与再继续的状态是由yield帮我们保存的

    函数体代码示范1

    def my_range(start,end,step):
        yield 1
        yield 2
        yield 3
    
    g=my_range(1,5,2)
    print(next(g))
    print(next(g))
    print(next(g))
    View Code

     函数体代码示范2

    #只要函数体代码内有yield   该函数体代码就不会运行,会被当做生成器
    <generator object my_range at 0x030A9EA0>

    def
    my_range(start,end,step): while start<end: yield start start+=step res=my_range(1,5,2) print(next(res)) print(next(res))

    函数体代码示范3

    def my_range(start,end,step=1):
        while start<end:
            yield start
            start=start+step
    res=my_range(1,7,2)    #<generator object my_range at 0x00569060>
    print(res)
    
    for i in my_range(1,9,2):
        print(i)

    函数体代码示范4

    # 实现tail -f access.log | grep 404的功能

    #写入文件代码
    
    with open('access.log','a',encoding='utf-8') as f:
        f.write('aaaaa
    ')
        f.flush()
    #执行文件端代码
    
    import time
    def tail(filepath):
        with open(filepath,'rb') as f:
            f.seek(0,2)
            while True:
                line=f.readline()
                if line:
                    yield line
                else:
                    time.sleep(0.5)
    line=tail('access.log')
    for i in line:
        print(i)

    yield附加案例

    def eater(name):
    print('%s is ready to eat'%name)
    while True:
    food=yield
    print('%s is start to eat %s'%(name,food))


    e=eater('nod')


    #首先初始化
    next(e) #此处可以写成e.send(None)

    #然后send从第一步e暂停的地方开始继续往下执行
    e.send('一只鸡')
    e.send('一只鸭')


  • 相关阅读:
    SQLSERVER调用DLL程序
    RAISERROR语句
    SQLSERVER表联结(INNER JOIN,LEFT JOIN,RIGHT JOIN,FULL JOIN,CROSS JOIN,CROSS APPLY,OUTER APPLY)
    SQL Server在存储过程中编写事务处理代码的三种方法
    找出表中缺失的连续数据(如:2,4,7,9;需要找出:1,3,5,6,8的数据)
    sqlserver用于统计表索引情况
    你需要了解的HTTP协议
    自己实现一个类似 jQuery 的函数库
    JS 函数 学习笔记
    JS 数组 学习笔记
  • 原文地址:https://www.cnblogs.com/nodchen/p/8747165.html
Copyright © 2011-2022 走看看