gpt4 book ai didi

Python:在return语句后自动删除类对象

转载 作者:太空宇宙 更新时间:2023-11-03 15:31:44 25 4
gpt4 key购买 nike

我有一个类,其中包含一个函数,在该函数中我构建并存储了一个可能非常大的凹凸数组,我从 HDF5 文件中读取该数组。 (我将数组存储为类对象,以便当我从文件中读取各种 HDF5 数据集时,我可以使用列表理解而不是手动循环。)我想要的是同时返回和删除存储的数组(即 clean return 语句后增加内存)。

class MWE(object):
def __init__(self,*args):
pass
return

def example(self,**kwargs):
self.array = readLargeArrayFromHDF5File(...)
return self.array # And simultaneously clean up self.array?

我知道我可以稍后在脚本中使用诸如 del MWE.array 之类的方法简单地删除数组,但是有什么方法可以自动清理而无需我记住这样做吗?

谢谢!

最佳答案

您需要使用context manager对于这种东西!当对象脱离 with 代码块时,它会自动清除对象。

from contextlib import contextmanager


class MWE(object):

def __init__(self, *args):
pass
return

@contextmanager
def example(self, **kwargs):
array = readLargeArrayFromHDF5File(...)
try:
yield array
finally:
array = None

@contextmanager
def example_two(self, **kwargs):
array = readLargeArrayFromHDF5File(...)
try:
for item in array:
yield item
finally:
array = None
# usage
with mwe_obj.example_two(kwargs) as result:
for r in result:
# work with your result here
print (r)

# when your code hits this block self.array would get set to None
print ('cleared large array')

关于Python:在return语句后自动删除类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42848026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com