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

    1 生成器

    1.1 生成器定义

    生成器就是一个函数,有yield关键字,主要是针对函数的

    from collections import Iterable,Iterator
    def test():
        print("test")
        yield 1
        yield 2
    
    g = test()
    print(g)
    print(isinstance(g,Iterator))   # 判断是否是迭代器对象
    

    结果:
    generator object test at 0x00000000027FC780
    True

    返回结果是证明生成器就是迭代器

    证明了是迭代器,迭代器可以用next()执行,这里就是next(g)

    print(next(g))
    

    结果是:
    test
    1

    结果是执行了一个test,并返回了一个1

    再写一条print(next(g)),

    结果是:
    test
    1
    2

    小结:

    生成器是一个有yield 的函数,想要使用就要用next()f方法,运行一次next后会程序会停在yield,再次执行的时,会从yield这个位置继续向下执行。

    1.2 生成器中的yield和函数return的区别

    函数的返回值return的区别
    return只能执行一次,函数就彻底结束
    yield可以返回多次值

    1.3 生成器--->迭代器 for循环

    from collections import Iterable,Iterator
    def test():
        print("test")
        yield 1,2,3
        yield 2
    
    g = test()
    
    for i in g:    # g是迭代器
        print(i)
    

    结果:
    test
    (1, 2, 3)
    2

    yield 返回值是多个的时候,返回的是元组

    牛逼之处:

    自己能够定义一个函数,然后控制函数的返回值,把函数构造成一个序列类型,能够被for遍历

    遇到迭代器,就用next()

    1.4 迭代器计数

    def countdown(n):
        print("start")
        while n > 0:
            yield n
            n -=1
        print('done')
    
    g = countdown(5)
    print(next(g))
    print(next(g))
    print(next(g))
    print(next(g))
    print(next(g))
    
    

    这种情况下,但n=0的时候,有next就会找yield,但是最后不能进入while循环了,所以会报错

    for循环的形式:

    def countdown(n):
        print("start")
        while n > 0:
            yield n
            n -=1
        print('done')
    
    g = countdown(5)
    for i in g:
    	print(i)
    

    2 Python制作动态查看文件的内容---tail工具

    tail -f 查看文件的时候,是一直在等待,直到有内容增加进来

  • 相关阅读:
    Team Foundation Sidekicks 2010
    Asp.net页面传值的方式汇总
    轻量级IOC框架Ninject使用
    AutoMapper使用简单总结
    页面请求的方式(Get与Post)
    总结2012 规划2013
    在reset css后两个input之间还是出现默认间隔的问题。
    js学习笔记事件委托
    程序猿工具——svn
    JS 事件添加onclick写法注意。
  • 原文地址:https://www.cnblogs.com/Python666/p/6695507.html
Copyright © 2011-2022 走看看