美文网首页
python3学习笔记:用生成器 创建新的迭代模式

python3学习笔记:用生成器 创建新的迭代模式

作者: 潼潼夏 | 来源:发表于2020-02-29 18:14 被阅读0次

    问题

    我们想实现一个自定义的迭代模式,使其区别于常见的内建函数(即range()、reversed()等)。

    解决方案

    如果想实现一种新的迭代模式,可以使用生成器函数来定义。这里有一个生成器可产生某个范围内的浮点数:

    def frange(start, stop, increment):
        x = start
        while x < stop:
            yield x
            x += increment
    
    for n in frange(0, 4, 0.5):
        print (n)
    #0
    #0.5
    #1.0
    #1.5
    #2.0
    #2.5
    #3.0
    #3.5
    

    函数中只要出现了yield语句就会将其转变成一个生成器。与普通函数不同,生成器只会在响应迭代操作时才运行。这里有一个实验性的例子,我们可以试试看,以了解这样的函数的底层机制究竟是如何运转的。

    def countdown(n):
        print ('Starting to count from', n)
        while n > 0:
            yield n
            n -= 1
        print ('Done!')
    c = countdown(3)
    print (c)
    #<generator object countdown at 0x102821450>
    print (next(c))
    #Starting to count from 3
    #3
    print (next(c))
    #2
    print (next(c))
    #1
    #Done!
    print (next(c))
    #StopIteration
    

    这里的核心特性是生成器函数只会在响应迭代过程中的"next"操作时才会运行。一旦生成器函数返回,迭代也就停止了。

    相关文章

      网友评论

          本文标题:python3学习笔记:用生成器 创建新的迭代模式

          本文链接:https://www.haomeiwen.com/subject/rsrmhhtx.html