- 迭代器
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))
来源:CSDN
作者:wanyun_qian
链接:https://blog.csdn.net/wanyun_qian/article/details/103465506