Python 生成器

2016-04-03 21:54:31 +08:00
 feather12315

对生成器不算了解,只是会用。可现在遇到了一个问题:

def test():
    a = 1
    b = 2
    c = 3
    while True:
        yield c
        c += 1

执行这段代码, a, b 变量还占用空间吗?

若占用的话,有啥办法可以实现相同的功能而避免 a b 变量占用空间呢?

实际情况是内存有点小, yield 的是一个回调函数,不想办法压榨内存的话会溢出。。。

1341 次点击
所在节点    问与答
5 条回复
lecher
2016-04-03 23:14:11 +08:00
python 有内存分析的模块: memory_profiler
用 pip 安装之后,可以通过在方法前加 @profile 之后执行 python -m memory_profiler filename.py 检查内存情况

代码和变量都会占用内存,生成器在引用之后,只要引用数大于 0 ,是不会释放里面声明的内容的。
feather12315
2016-04-03 23:24:59 +08:00
@lecher Thanks. 我看看这
julyclyde
2016-04-05 10:56:20 +08:00
@lecher 试了试,貌似对 generator 函数, memory_profiler 无效。不知道原理
julyclyde
2016-04-05 10:59:47 +08:00
我猜可能是因为 generator 函数没有 return , decorator 不知道它什么时候完成的
feather12315
2016-04-05 12:27:04 +08:00
@julyclyde 唔。最近有些忙,我还没看。。谢谢你啦。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/268360

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX