import cStringIO
def f():
buffer = cStringIO.StringIO()
buffer.write('something')
return buffer.getvalue()
StringIO.close()
:释放内存缓冲区。试图用关闭的StringIO对象进一步执行 操作将引发ValueError。
难道我必须做buffer.close()
,否则它会自动发生缓冲区超出范围和垃圾收集?
UPDATE:
我做了一个试验:
import StringIO, weakref
def handler(ref):
print 'Buffer died!'
def f():
buffer = StringIO.StringIO()
ref = weakref.ref(buffer, handler)
buffer.write('something')
return buffer.getvalue()
print 'before f()'
f()
print 'after f()'
结果:
[email protected]:~/projects$ python test.py
before f()
Buffer died!
after f()
[email protected]:~/projects$
为什么不打印f()而不仅仅是一个裸f()? – mpag 2016-10-12 20:49:41