生成器是一种特殊的迭代器,可以迭代
第一种方式
# nums=[x*2forxinrange(10)]#print(nums)nums=(x*2forxinrange(10))print(nums)fornuminnums:print(num)# nums=[x*2forxinrange(10)]#print(nums)nums=(x*2forxinrange(10))print(nums)fornuminnums:print(num)把【】改成()就好了
第二种方式
看一个函数中是否有yield,如果没有的话,就是一个普通的函数;如果有的话,他就是一个生成器的模板(就是类)
如果在调用函数的时候,发现函数中有yield,此时就不是调用函数了,而是创建了一个生成器对象,所以这个时候就可以找一个变量接收他,就比如:
obj = create_num(10)
代码
defcreate_num(all_num):# a = 0# b =1a,b=0,1current_num=0whilecurrent_num<all_num:# print(a)yielda#导致函数暂停在这里,下一次会在暂停的地方#继续往下走,当所有的函数都执行完后#内部会抛出一个异常,这个函数就执行完了a,b=b,a+b current_num+=1obj=create_num(10)fornuminobj:print(num)