跟着lucky老师学Python

第八章 迭代器和生成器

2019-04-01  本文已影响0人  帅气的Lucky

迭代器和生成器

可迭代对象:可以直接作用于for循环的对象统称为可迭代对象(Iterable)。可以用isinstance()去判断一个对象是否是Iterable对象

可以直接作用于for的数据类型一般分两种
1、集合数据类型,如list、tuple、dict、set、string
2、是generator,包括生成器和带yield的generator function

迭代器:不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后跑出一StopIteration错误表示无法继续返回下一个值

迭代器:

  1. 迭代是Python最强大的功能之一,是访问集合元素的一种方式。。
  2. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
  3. 迭代器有两个基本的方法:iter()next()

​可以被next()函数调用并不断返回下一个值的对象称为迭代器(Iterator对象)
可以使用isinstance()函数判断一个对象是否是Iterator对象

使用 iter函数 变成Iterator对象

a = iter([1,2,3,4,5])
print(next(a))

引入方法判断是否为 Iterable 可迭代对象

from collections import Iterable
from collections import Iterator

from  collections import Iterable
from  collections import Iterator

print(isinstance([], Iterable))
print(isinstance((), Iterable))
print(isinstance({}, Iterable))
print(isinstance("", Iterable))
print(isinstance((x for x in range(10)), Iterable))
print(isinstance(1, Iterable))

print(isinstance([], Iterator))
print(isinstance((), Iteratorc
print(isinstance({}, Iterator))
print(isinstance("", Iterator))
print(isinstance((x for x in range(10)), Iterator))

生成器:

​ 使用了yield的函数称为生成器

​ 生成器也实现了迭代器的功能

​ 使用列表生成式 mygener = (x for x in range(1000))#用一个生产一个并不是像生成列表一样都生成完 节约内存

print(type(x **for **x **in **range(10)))

调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回yield的值。并在下一次执行 next()方法时从当前位置继续运行。

例子:

#普通列表 消耗资源
mylist = [x for x in range(100000)]
for i in mylist:
    print(i)
#对比执行效率
#生成器  节省资源
mylist = (x for x in range(100000))
for i in mylist:
    print(i) 

在函数里使用 yield 来配合next来使用的

  1. yield
  2. Next()

使用yield关键字修饰的值 下面的代码不会再执行 只有再次调用next函数的时候 会再次执行

#没有生成器的go方法 调用的时候一口气都跑完  消耗资源
def go():
    print(1)
    print(2)
    print(3)
#有生成的函数 可以实现 next一次 走一次
def go():
    print(1)
    yield 10 #执行print1,返回10,next
    print(2)
    yield 20#执行print2,返回20,next
    print(3)
    yield 30#执行print3,返回30,next

def createlist():
    for i  in range(100):
        print(i)
        yield  i

X=createlist()
print(type(X))
next(X)
next(X)
next(X)
next(X)
上一篇下一篇

猜你喜欢

热点阅读