我在virtualenv中使用python3.6。而且我想知道我是否使用来自外部的对象并声明。
这是问题的示例代码。
with tempfile.NamedTemporaryFile(delete=False) as tf:
tf.write(audio_stream)
# outside of with
print(tf.name) # is it dangerous?
我只想用语句写,并做其他的东西。 (例如tf.name
)。从外部访问tf
对象是否存在潜在威胁? (无意的垃圾收集等)
如果不推荐,我也想知道确切的原因。感谢
答案 0 :(得分:1)
没有无意的垃圾收集。每类对象决定退出with
对它的意义,因此没有硬性规则。通常保持资源(如基础文件句柄)已关闭,但在关闭期间通常不会更改的其他属性不会更改。
在您的情况下,临时文件已关闭,因此读/写/搜索等...不起作用,但name属性可以安全阅读。
如果您确实需要了解给定对象,请打开其来源并查看其__exit__
方法。