Python中的迭代器和生成器

十年热恋 提交于 2019-12-10 02:47:12
  • 迭代器
    Python为迭代器提供了两个BIF:iter()和next(),对一个对象调用iter()就得到他的迭代器,调用next()就会返回下一个值,而当迭代器没有值可以返回的时候就会抛出一个StopIteration的异常,关于迭代器,有两个魔法方法:__iter()__和__next()__,下面实例:
class Fibs:
	def __init__(self, n = 20):
		self.a = 0
		self.b = 1
		self.n = n

	def __iter__(self):
		return self

	def __next__(self):
		self.a, self.b = self.b, self.a + self.b
        if self.a > self.n:
    		raise StopIteration
    	return self.a
fibs = Fibs()
for each in fibs:
	print(each)
  • 生成器
    强大的列表推导式:
print([i*i for i in range(10)])
print([i for i in range(1000) if not(i % 2) and (i % 3)])
print({i: i % 2 == 0 for i in range(10)})

但是如果输入:

print(i for i in range(10))

运行结果就会是:

<generator object <genexpr> at 0x000001BB4B9A9A48>

还有一个特性更厉害,如果将生成器表达式作为函数参数使用的话,可以直接写推导式,不必加小括号:

sum(i for i in range(100) if not(i % 10))
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!