码迷,mamicode.com
首页 > 其他好文 > 详细

生成器

时间:2019-02-16 15:26:49      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:区别   列表   特殊   span   循环   while   传参   创建   for   

两种创建生成器的方法:

  将列表推导式的 [ ] 换成 ( )

  在函数里使用 yield

三种启动生成器的方法:

  next()

  send(参数)

  for循环

迭代器和生成器的区别:

  迭代器可以减少资源耗用,实现循环

  生成器是特殊的迭代器,可以通过yield暂停执行,也可以通过send启动方式传参改变执行方式

创建生成器对象和实例化一样,互不影响

 

实例

def fibo(all_num):
    """存在yield的函数,会变为生成器的模板"""

    a, b = 0, 1
    current_num = 0
    while current_num < all_num:
        ret = yield a  # yield暂停,返回a的值,并且下次遍历时从yield下一个语句开始,即赋值给ret
        print("ret:", ret)
        a, b = b, a+b
        current_num += 1


# 创建生成器对象
obj = fibo(10)
# obj2是新开辟的内存空间,与ojb互不影响
obj2 = fibo(10)

# 启动生成器方法1
ret = next(obj)
print("obj:", ret)

# 启动生成器方法2,可传参,但第一次启动就使用send,参数必须是None
ret = obj.send("")  # send(参数)中的参数等价于生成器里的yidel a的结果
print("obj:", ret)

# 启动生成器方法3
for i in obj:
    print(i)

 

生成器

标签:区别   列表   特殊   span   循环   while   传参   创建   for   

原文地址:https://www.cnblogs.com/Selling-fish-bears/p/10387698.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!