是否可以从函数返回值创建弱ref,如果是这样?
- 您是否从功能本身返回feekRef.proxy:返回feekref.proxy(returnVal)
-
或在调用func fargref.proxy(func)
时将返回阀包裹在feekref.proxy中import pandas import weakref mkt_df = weakref.proxy(pandas.read_csv(filepath_or_buffer='filepath', delimiter=',')) print(mkt_df)
我无法让他们工作,因为我在代理时遇到参考错误参考:弱引用的对象不再存在
这是完全可能的,但也没有用。除非函数在其他地方存储强引用(内部缓存之类),否则将调用包装在weakref.ref
/weakref.proxy
中时,则会发生以下情况:
- 函数返回强有力的参考(只有一个强参考,所有者是呼叫者)
- 强参考将传递给
ref
/proxy
构造函数(将强涉及强的参考所有权作为局部变量传输到弱参考构造函数),创建一个弱参考 - 一旦构造函数返回,它就会发布对通过它的论点的有力参考
- 由于不存在其他强参考,因此返回值立即被释放,并且弱参考被清除
简单地说,弱参考只有在您有一定的期望,即强有力的参考会持续一段时间,才有用。在这种情况下,您保证在正常情况下不会,因此弱参考是没有用的。
如果您想要有用的弱参考,则需要在某个地方存储一个强参考,然后从中创建一个弱参考,例如:
mkt_df_strong = pandas.read_csv(filepath_or_buffer='filepath', delimiter=',')
mkt_df_weak = weakref.proxy(mkt_df_strong)
# The weak reference now remains useful until the strong reference disappears