我在virtualenv中使用python3.6。我想知道我是否会用外部的with语句来处理对象。
这是问题的示例代码。
with tempfile.NamedTemporaryFile(delete=False) as tf: tf.write(audio_stream) # outside of with print(tf.name) # is it dangerous?
我只想用语句来写,用语句之外的其他东西来写。(例如 tf.name )是否存在访问 tf 从外面拿东西吗?(无意收集垃圾等)
tf.name
tf
如果不建议这样做,我想知道确切的原因。谢谢
没有意外的垃圾收集。每类对象决定退出 with 意味着它,所以没有硬性规定。通常情况下,像底层文件句柄这样的保留资源是关闭的,但在关闭期间通常不会更改的其他属性是不变的。
with
在您的情况下,临时文件是关闭的,所以读/写/查找等…不工作,但name属性是安全的。
如果你真的需要知道一个给定的对象,打开它的源代码并查看它的 __exit__ 方法。
__exit__