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

    生成器:

      在函数内部包含yield关键字,那么该函数执行的结果就是生成器(生成器就是迭代器)

    def func():
        print('first')
        yield 1111
        print('second')
        yield 2222
    g = func()
    print(next(g))
    print(next(g))
    from collections import Iterator
    print(isinstance(g,Iterator))#判断g是否是生成器

    yield的功能:1.把函数的执行结果做成迭代器(帮函数封装好__iter__,__next__方法)

          2.函数暂停与再继续运行的状态是由yield保存的

    def func(n):
        while True:
            yield n
            n += 1
    g = func(0)
    print(next(g))
    
    def my_range(start,stop):
        while True:
            if start == stop:
                raise StopIteration
            else:
                yield start
                start += 1
    g = my_range(1,3)
    for i in g:
        print(i)

    yield与return的比较?

      相同点:都有返回值的功能

      不同点:return只能返回一次值,而yield可以返回多次值

    import time
    def tail(filepath):
        with open(filepath,'r') as f:
            f.seek(0,2)
            while True:
                line = f.readline()
                if line:
                    yield line
                else:
                    time.sleep(0.2)
    lines = tail('access.log')
    
    #管道是传递不同介质之间数据的问题
    def grep(pattern,lines):
        for line in lines:
            if pattern in lines:
                print(line,end = '')
    grep('error',lines)
  • 相关阅读:
    String ,StringBuilder, StringBuffer
    apt-get方式删除软件
    curl命令的使用
    maven自动部署测试Web应用
    几个重要的maven命令
    linux中默认jdk的配置
    登录注册的页面制作
    运用php做投票题,例题
    复选框式查询 例题租房子
    会话用法 和留言板例题
  • 原文地址:https://www.cnblogs.com/wangmengzhu/p/7233195.html
Copyright © 2011-2022 走看看