• 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']
    

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

  • 相关阅读:
    [LeetCode]Word Break
    [LeetCode]singleNumber
    [LeetCode]Palindrome
    新浪博客无法访问
    C++基础之顺序容器
    C++基础之IO类
    [LeetCode]Restore IP Addresses
    [LeetCode]Maximal Rectangle
    [LeetCode]Reverse Linked List II
    ACM 树形数组
  • 原文地址:https://www.cnblogs.com/thx2199/p/15351482.html
Copyright © 2020-2023  润新知