美文网首页粗糙学习-py
iterator与generator

iterator与generator

作者: Darui30 | 来源:发表于2019-06-14 09:57 被阅读0次

可迭代对象:

  • 能使用for x in xxx

迭代器:

  • 针对的是对象(class);
  • 把一个迭代对象变成迭代器,只需要在普通的对象下面实现两个内置函数:__iter____next__
  • 可以使用next
  • 一次性
#coding:utf8

class BookCollection(object):
    def __init__(self):
        self.data = ['《往事》','《只能》','《回味》']
        self.index = 0
        pass
    def __iter__(self):
        return self
    def __next__(self):
        if self.index >= len(self.data):
            raise StopIteration()
        r = self.data[self.index]
        self.index += 1
        return r
        

books = BookCollection()
for book in books:
    print(book) # 《往事》
                # 《只能》
                # 《回味》

生成器

  • 针对的是函数
#coding:utf8

# 这个只是一个列表
n = [i for i in range(1,11)]
print(n) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(type(n)) # <class 'list'>

print('=='*20) # ========================================

# 变成小括号,则变成生成器
n = (i for i in range(1,11))
print(n)    # <generator object <genexpr> at 0x107e982b0>
print(type(n)) # <class 'generator'>
print(next(n)) # 1
print(next(n)) # 2
print(next(n)) # 3
print(next(n)) # 4
print(next(n)) # 5

print('=='*20) # ========================================

for i in n:print(i) # 6
                    # 7
                    # 8
                    # 9
                    # 10


print('=='*20) # ========================================


# 函数举例子
def gen0(max):
    n = 0
    while n<=max:
        n+=1
        print(n)
        
print(gen0(9))  # 1
                # 2
                # 3
                # 4
                # 5
                # 6
                # 7
                # 8
                # 9
                # 10
                # None



print('=='*20) # ========================================

# 不做打印,yield,生成器
def gen(max):
    n = 0
    while n<=max:
        n+=1
        yield n

print(gen(9))   # <generator object gen at 0x105bff308>
for i in gen(9):
    print(i)    # 1
                # 2
                # 3
                # 4
                # 5
                # 6
                # 7
                # 8
                # 9
                # 10

相关文章

  • iterator与generator

    可迭代对象: 能使用for x in xxx 迭代器: 针对的是对象(class); 把一个迭代对象变成迭代器,只...

  • 你一定要知道的iterator和generator

    generator是一种特殊的iterator,generator可以替代iterator实现,使代码更为简洁 什...

  • ES6 Iterator、Generator

    Iterator 是什么,能做什么? Generator 是什么,能做什么? Iterator Iterator ...

  • JS 异步编程

    1. Iterator|Generator|await 1.1 Iterator 语法 Iterator 是一个接...

  • Promise Iterator Generator asyn

    Promise Iterator Generator async-await 都是异步解决方案,Iterator...

  • Iterator and Generator

    for/each 循环 for/each 与 for/in 循环类似。但for/each并不遍历对象的属性,而是遍...

  • iterable, iterator & generator

    ### iterable, iterator & generator 我该从哪儿说起呢?今天下午,我很专注地学了四...

  • iterable/iterator/generator

    7、什么是 iterable/iterator/generator Iterable 可迭代对象列表、元祖、字符串...

  • Iterator&generator

    Iterator(迭代器) 概念迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元...

  • 目录

    JS篇 Promise Iterator Generator async-await[https://www.ji...

网友评论

    本文标题:iterator与generator

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