python nefRef在函数返回值上



是否可以从函数返回值创建弱ref,如果是这样?

  1. 您是否从功能本身返回feekRef.proxy:返回feekref.proxy(returnVal)
  2. 或在调用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中时,则会发生以下情况:

  1. 函数返回强有力的参考(只有一个强参考,所有者是呼叫者)
  2. 强参考将传递给ref/ proxy构造函数(将强涉及强的参考所有权作为局部变量传输到弱参考构造函数),创建一个弱参考
  3. 一旦构造函数返回,它就会发布对通过它的论点的有力参考
  4. 由于不存在其他强参考,因此返回值立即被释放,并且弱参考被清除

简单地说,弱参考只有在您有一定的期望,即强有力的参考会持续一段时间,才有用。在这种情况下,您保证在正常情况下不会,因此弱参考是没有用的。

如果您想要有用的弱参考,则需要在某个地方存储一个强参考,然后从中创建一个弱参考,例如:

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

相关内容

  • 没有找到相关文章

最新更新