美文网首页Python
生成器 --使用生成器来创建新的迭代模式

生成器 --使用生成器来创建新的迭代模式

作者: cook__ | 来源:发表于2018-10-03 12:12 被阅读8次

目的:实现一个自定义的迭代模式,使其区别与常见的内建函数(即range()、reversed()等)

解决方案:使用生成器函数,实现一种新的迭代模式
def frange(start, stop, increment):
    x = start
    while x < stop:
        yield x
        x += increment

# 使用for循环对其迭代
for n in frange(0, 1, 0.25):
    print(n)
Outs:
0
0.25
0.5
0.75

# 使用 list()访问
print(list(frange(0, 1, 0.25)))
Outs:
[0, 0.25, 0.5, 0.75]

下面来看下生成器函数的底层机制是如何运转的:

def countdown(n):
    while n>0:
        yield n
        n -= 1
    print('Done!')

c = countdown(3)  # 创建一个生成器
c
Out[9]: <generator object countdown at 0x10d920f68>

next(c)
Out[10]: 3
next(c)
Out[11]: 2
next(c)
Out[12]: 1
next(c)
Done!
Traceback (most recent call last):
StopIteration
关于生成器:

1、函数中只要出现了yield语句就会将其转变成一个生成器。与普通函数不同,生成器只会在响应迭代操作时才运行;
2、生成器函数只会在响应迭代过程中的"next"操作时才会运行;一旦生成器函数返回,迭代也就停止了;
3、生成器是可以迭代的(next()或者for),和迭代器一样迭代结束时,报StopIteration。

相关文章

  • 生成器 --使用生成器来创建新的迭代模式

    目的:实现一个自定义的迭代模式,使其区别与常见的内建函数(即range()、reversed()等) 解决方案:使...

  • JavaScript设计模式-0001---迭代器模式

    使用闭包实现迭代器 test es6使用 生成器实完成迭代器模式 使用es6的生成器实现数据自增 迭代器/es6的...

  • python 如何使用生成器函数实现可迭代对象?

    生成器对象和迭代器对象相似,支持 next()生成器使用关键字 yield生成器对象也是可迭代对象使用生成器函数的...

  • 2018-07-16

    ## 1\. 生成器和生成器函数 ``` 生成器的本质就是迭代器 生成器的三种创建办法: 1.通过生成器函数 ...

  • Illustrator创建形状

    一、形状生成器创建形状 使用形状生成器工具创建形状默认情况下,该工具处于合并模式。新形状继承的艺术样式取决于以下规...

  • 生成器和迭代器

    可以用next(生成器),但是我们一般用for循环来迭代生成器 使用生成器的好处: 1.内存使用更加高效。比如列表...

  • PHP生成器

    Generators 生成器提供了一种容易的方法来实现简单的迭代器 生成器允许您编写使用foreach的代码迭代一...

  • 生成器(Generator)

    什么是生成器 生成器是一个通过构造函数 Generator 创建的对象,生成器既是一个迭代器,同时又是一个可迭代对...

  • yield用法

    基本用法 yield的作用主要是创建生成器 generator, 生成器也是用于迭代的,想对于普通迭代对象如lis...

  • yield and Iterator

    Generator(生成器) 生成器是特殊的迭代器,迭代器不一定是生成器。 生成器与迭代器均是可迭代对象。 目前学...

网友评论

    本文标题:生成器 --使用生成器来创建新的迭代模式

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