3
生成器函數返回的生成器對象是否持有對函數對象的引用?換句話說,是有可能實現magic_fn
這可以這樣做:發電機是否知道發電機功能?
>>> def gen():
... yield 1
... yield 2
...
>>> gen.attr = 'potato'
>>> g = gen()
>>> del gen
>>> next(g)
1
>>> magic_fn(g, 'attr')
'potato'
該發電機具有一個代碼對象(g.gi_code
),幀(g.gi_frame
)和名稱(g.__name__
)的引用。該代碼對象甚至具有與gen.__code__
相同的內存地址。
但是,假設它還沒有被垃圾收集,我找不到方法來訪問gen.__dict__
。這是可能的,還是鏈接已經失去了一旦發電機創建?
謝謝,我也能夠看到它通過在'Dummy'上執行一個'__del__'來獲得,它打印出'再見'。你能否添加更多關於'weakref.ref'這個用法的解釋和它的工作原理? – wim
@wim:添加了一些弱引用的解釋。 – user2357112