什么是python关键字"with"用于?

Mik*_*keN 478 python

什么是python关键字"with"用于?

示例来自:http://docs.python.org/tutorial/inputoutput.html

>>> with open('/tmp/workfile', 'r') as f:
...     read_data = f.read()
>>> f.closed
True
Run Code Online (Sandbox Code Playgroud)

Rob*_*len 414

在python中,在with使用非托管资源(如文件流)时使用关键字.它类似于usingVB.NET和C#中的语句.它允许您确保在使用它的代码完成运行时"清理"资源,即使抛出异常也是如此.它为try/finally块提供"语法糖" .

来自Python文档:

with声明澄清了之前将使用try...finally块来确保执行清理代码的代码.在本节中,我将讨论通常会使用的语句.在下一节中,我将研究实现细节,并展示如何编写用于此语句的对象.

with语句是一个控制流结构,其基本结构是:

with expression [as variable]:
    with-block
Run Code Online (Sandbox Code Playgroud)

表达式被计算,它应该导致一个支持上下文管理协议的对象(即has __enter__()__exit__()方法).

根据Scott Wisniewski的评论更新固定的VB标注.我确实混乱withusing.

  • 在Python中,看起来自定义对象必须实现(或从实现的东西继承)`__enter __和`__exit__`方法.使用IronPython(python on .Net),您可以从IDisposable实现,这将涵盖它.不确定纯Python或其他框架中最好的方法是什么. (11认同)
  • 使用哪些方法来关闭开放资源?如果我使用自己的特殊打开/关闭方法创建自己的文件系统对象,那么"with"关键字是否可以使用?或者"with"只能使用内置的Python资源类型? (9认同)
  • 仅供参考:这使VB.NET中的“ using”语句与python中的“ with”块的行为相混淆,而与VB中的“ with”语句完全不同。请参阅以下内容:http://msdn.microsoft.com/en-us/library/htd05whh.aspx和http://msdn.microsoft.com/en-us/library/wc500chb(v=vs.110).aspx (2认同)

use*_*873 409

Preshing on Programming博客的解释:

如果你有两个相关的操作,你想要成对执行,中间有一段代码,这很方便.经典示例是打开文件,操作文件,然后关闭它:

 with open('output.txt', 'w') as f:
     f.write('Hi there!')
Run Code Online (Sandbox Code Playgroud)

上面的with语句将在嵌套的代码块之后自动关闭文件.(继续阅读以确切了解关闭是如何发生的.)使用with语句的优点是无论嵌套块如何退出,都可以保证关闭文件.如果在块结束之前发生异常,它将在异常被外部异常处理程序捕获之前关闭该文件.如果嵌套块包含return语句或continue或break语句,那么with语句也会在这些情况下自动关闭文件.

  • 我在这里找到了完整的示例解释:http://preshing.com/20110920/the-python-with-statement-by-example/ (13认同)