生成器、迭代器

2018-10-29  本文已影响0人  想吃鸡排饭

生成器generator

本着节约的原则,在使用列表元素时,按照某种算法,不断的推演出后续的算法,不必创建完整的列表浪费空间。

  1. 方法一:类似于列表生成式,只是把[ ]变为(),利用for循环可以输出该生成器的后续元素
g = (x * x for x in range(10))
for x in g:
  print(x)
  1. 方法二:如果一个函数包含yield关键字,则它是一个generator.在每次调用next()方法时,遇到yield时语句返回,再次执行时从上次的field语句处继续执行。
def gen():
    print('first step')
    yield 1
    print('second step')
    yield (2)
    print('third step')
    yield (3)
g=gen();
next(g)
#输出为    first step
for n in gen():
    print(n)
#输出结果:
# first step
# 1
# second step
# 2
# third step
# 3
def triangles():
   l=[1]
   while True:
       yield l;
       l=[l[x]+l[x+1]for x in range(len(l)-1)];
       l.insert(0,1);
       l.append(1)
n=0
for t in triangles():
   print(t)
   n=n+1
   if n==10:
       break

迭代器

前几天学过使用 isinstance()判断一个对象是否是 Iterable 对象
今天再学习使用 isinstance()判断一个对象是否是 Iterator 对象


生成器都是 Iterator 对象,但 list、dict、str 虽然是 Iterable,却不是Iterator。

from collections import Iterator
print(isinstance((x for x in range(10)), Iterator))#输出为True
print(isinstance('123',Iterator))#输出为False

可以使用 iter()函数 把 list、dict、str 等 Iterable 变成 Iterator

from collections import Iterator
print(isinstance(iter([]), Iterator))#输出为True
print(isinstance(iter('abc'), Iterator) )#输出为True
上一篇 下一篇

猜你喜欢

热点阅读