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 查看文件的时候,是一直在等待,直到有内容增加进来

  • 相关阅读:
    UILabel的使用
    CGAffineTransform的使用
    UIView的常用方法
    UICollectionViewController的用法1
    网址连接
    android developers blog
    Java并发编程:volatile关键字解析
    Android触摸屏事件派发机制详解与源码分析
    setScale,preScale 和 postScale 的区别
    android 内存
  • 原文地址:https://www.cnblogs.com/Python666/p/6695507.html
Copyright © 2011-2022 走看看