找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 1891|回复: 1

[求助] 生成器这个问题有点想不通

13

主题

20

帖子

20

积分

贫民

积分
20
玩蛇的胖子 发表于 2017-11-29 14:09:48 | 显示全部楼层 |阅读模式
  1.     print('ok1')
  2.     yield 1
  3.     print('ok2')
  4.     yield 2
  5. a=f()
  6. next(f())
  7. next(f())
  8. next(a)
  9. next(a)
  10. # ok1
  11. # ok1
  12. # ok1
  13. # ok2
复制代码

如上面的代码所示,a=f() 不是代表让a等价于f() 了吗?为什么用生成器的时候,连续用next(f())执行,都是输出ok1  而用next(a)却可以输出ok2呢?
回复

使用道具 举报

2

主题

219

帖子

219

积分

版主

Rank: 7Rank: 7Rank: 7

积分
219

热心会员默默耕耘优秀版主

剑心无痕 发表于 2017-11-29 15:02:57 | 显示全部楼层

a=f()
next(f())    #你可以想象成b=f()然后执行next(b)  
next(f())    #你可以想象成c=f()然后执行next(c) 这里的c跟上面的b我是随便定义的,意思就是不一样重新的初始化
next(a)     # a是一个已经实例话的对象
next(a)
# ok1
# ok1
# ok1
# ok2

print(f()) # <generator object f at 0x000001AAAB7B2410> 你可以看到他是一个object的对象
print(f()) # <generator object f at 0x000001AAAB7B23B8> 每次打印的地址是不一样的
print(a) # <generator object f at 0x000001AAAB7B2360> 而a的地址是一样的
print(a) # <generator object f at 0x000001AAAB7B2360>

如果你想让a是f的话需要这样执行
a = f
next(a())
next(a())
print(a) <function f at 0x000001AAAB7A7730> 函数指针(如果你学过c语言的话)
print(f) <function f at 0x000001AAAB7A7730>

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表