著名的斐波拉契数列(Fibonacci),除第一个和第二个数外,
任意一个数都可由前两个数相加得到:
斐波拉契数列用列表生成式写不出来,但是,用函数把它打印出来却很容易:
在这里插入代码片def fid(max):
n, a, b = 0, 0, 1
while n < max:
print(b)
a, b = b, a + b
n = n + 1
return 'done'
注意,赋值语句:
a, b = b, a + b
相当于:
t = (b, a + b) # t是一个tuple
a = t[0]
b = t[1]
但不必显示写出临时变量t就可以赋值。
上面的函数也可以输出斐波拉契数列的前N个数:
>>> fib(10)
1
1
2
3
5
8
13
21
34
55
done
仔细观察,可以看出,fib函数实际上是定义了斐波拉契数列的推算规则,可以从第一个元素开始,
推算出后续任意的元素,这种逻辑其实非常类似generator。
迭代器:
我们已经知道,可以直接作用于for循环的数据类型有以下几种:
一类是集合数据类型,如list、tuple、dict、set、str等;
一类是generator,包括生成器和带yield的generator function。
这些可以直接用于for循环的对象统称为可代对象:Iterable.
可以使用isinstance()判断一个对象是否是Iteable对象:
在这里插入代码片>>> from collections import Iterable
>>> isinstance([],Iterable)
True
>>> isinstance({
},Iterable)
True
>>> isinstance('abc',Iterable)
True
>>> isinstance((x