生成器
1.创建生成器的第一种方式
ipython中:
In [1]: nums = (x*2 for x in range(10))
In [2]: nums
Out[2]: <generator object <genexpr> at 0x7fb2a6137fc0>
In [3]: for num in nums:
...: print(num)
...:
0
2
4
6
8
10
12
14
16
18
2.创建生成器的第二种方式(定义一个函数,让这个函数变成生成器)
生成斐波那契数列:1 1 2 3 5 8 13…
def fib(num):
a,b,count = 0,1,1
while count <= num:
print(b)
a,b = b,a+b
count +=1
fib(1000)
3.函数中的yeild
如果在调用函数的时候,发现这个函数中有yeild
那么此时,也就不是调用函数了,而是创建了一个生成器对象
def creat_num(all_num):
print('~~~~~~~~~~~1~~~~~~~~~~~~~~~~~')
a,b=0,1
current_num = 0
while current_num < all_num:
print('~~~~~~~~~2~~~~~~~~~~~~~~~~~')
yield a # 相当于暂停了程序
#print(a)
print('~~~~~~~~~~~~~~3~~~~~~~~~~~~')
a,b = b,b+a
current_num += 1
print('~~~~~~~~~~~4~~~~~~~~~~~~~~~~')
obj = creat_num(5) #此时.我们发现程序会报错(告诉我们,生成器里面没有东西了)
while True: #写成死循环,取出所有值
try:
ret = next(obj)
print('obj:',ret)
except Exception as ret:
print(ret.value)
break
obj = creat_num(5) #一个一个的取值
print(obj)
ret