zoukankan      html  css  js  c++  java
  • Python yield 关键字

    结论:

    yield 就是 记录一个 返回值 及其 返回位置,下次迭代从这个 位置 开始。带 yield 的函数更像是一个生成器,而不再是函数了。

    实例:

    首先定义一个如下函数

    def gen():
         print('line 1')
         yield 1
         print('line 2')
         yield 2
         print('line 3')
         return 3
    

    测试1

    next(gen()) 
    next(gen())
    

    输出结果:

    line 1
    line 1
    

    理解:next()每次调用了一个新的gen()对象实例


    测试2

    g =  gen()
    print(next(g))
    print(next(g))
    print(next(g,'End'))
    

    输出结果:

    line 1
    line 2
    line 3
    

    理解:next()迭代赋予g的一个对象实例


    测试3

    g =  gen()
    print(next(g))
    print(next(g))
    print(next(g,'End'))
    

    输出结果:

    line 1
    1
    line 2
    2
    line 3
    End
    

    理解:同迭代元组对象相同,迭代打印。最后一个End赋值是因为next接收不到 return 的 3,不赋值会报错。


    进阶:

    def myMap(func, iterable):
        for item in iterable:
            yield func(item)
    
    result = myMap(str, range(5))
    print(result)
    print(list(result))
    

    输出结果:

    <生成器对象地址>
    ['0','1','2','3','4']
    

    经过上一个实例的三个测试,看到这里大家应该都能明白了。

  • 相关阅读:
    ios本地推送
    ios BUG
    性能优化
    数据结构设计
    代码的可维护性
    NSMutalbleDictionary
    NSDictionary
    NSMutableArray
    java 容器
    Java bug
  • 原文地址:https://www.cnblogs.com/thx2199/p/15351482.html
Copyright © 2011-2022 走看看