生成器是一种特殊的迭代器,可以迭代
第一种方式
# nums = [x*2 for x in range(10)]
# print(nums)
nums = (x*2 for x in range(10))
print(nums)
for num in nums:
print(num)
# nums = [x*2 for x in range(10)]
# print(nums)
nums = (x*2 for x in range(10))
print(nums)
for num in nums:
print(num)
把【】改成()就好了
第二种方式
看一个函数中是否有yield,如果没有的话,就是一个普通的函数;如果有的话,他就是一个生成器的模板(就是类)
如果在调用函数的时候,发现函数中有yield,此时就不是调用函数了,而是创建了一个生成器对象,所以这个时候就可以找一个变量接收他,就比如:
obj = create_num(10)
代码
def create_num(all_num):
# a = 0
# b =1
a,b = 0,1
current_num = 0
while current_num < all_num:
# print(a)
yield a
#导致函数暂停在这里,j将值返回给next,下一次会在暂 停的地方
#继续往下走,当所有的函数都执行完后
#内部会抛出一个异常,这个函数就执行完了
a,b = b,a+b
current_num += 1
obj = create_num(10)
for num in obj:
print(num)
另一种调用方法:只要是迭代器,就可以使用next方法,调用一次,启动一次
ret = next(obj)
print(ret)
有yield就可以直接调用next方法
网友评论