当前位置: 首页 > 面试题库 >

解释Python的'__enter__'和'__exit__'

慕鹏
2023-03-14
问题内容

我在某人的代码中看到了这一点。这是什么意思?

    def __enter__(self):
        return self

    def __exit__(self, type, value, tb):
        self.stream.close()
from __future__ import with_statement#for python2.5

class a(object):
    def __enter__(self):
        print 'sss'
        return 'sss111'
    def __exit__(self ,type, value, traceback):
        print 'ok'
        return False

with a() as s:
    print s


print s

问题答案:

使用这些魔术方法(__enter____exit__)使您可以实现可轻松用于该with语句的对象。

这个想法是,它使构建需要执行一些“清除”代码的代码(将其视为一个try- finally块)变得容易。这里有更多的解释。

一个有用的例子是数据库连接对象(一旦对应的“ with”语句超出范围,它就会自动关闭连接):

class DatabaseConnection(object):

    def __enter__(self):
        # make a database connection and return it
        ...
        return self.dbconn

    def __exit__(self, exc_type, exc_val, exc_tb):
        # make sure the dbconnection gets closed
        self.dbconn.close()
        ...

如上所述,将此对象与with语句一起使用(from __future__ import with_statement如果您使用的是Python
2.5,则可能需要在文件顶部进行操作)。

with DatabaseConnection() as mydbconn:
    # do stuff

PEP343-‘with’语句’也有不错的写法。



 类似资料:
  • 问题内容: 我试图在Windows 7计算机上设置python 2.7.6(首先安装了python 3.3.3)。将项目解释器添加到settings- project解释器后,选择项目解释器时,出现此错误 文件“ C:\ Python33 \ Lib \ site.py”,行173 file = sys.stderr)^ SyntaxError:语法无效 最初在设置页面中添加python 2.7解

  • 当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。 由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。 CPython 当我们从Python官方网站下载并安装好

  • 当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。 由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。 CPython 当我们从Python官方网站下载并安装好

  • 2. Python 解释器 2.1 调用解释器 在可用的机器上,Python解释器通常安装成/usr/local/bin/python;请将/usr/local/bin放在您的Unix shell搜索路径,以使得可以通过在shell中键入命令 python 来启动它。由于解释器放置的目录是一个安装选项,其它地方也是可能的;请与您本地的Python专家或系统管理员联系。(例如,/usr/local

  • 翻译的结果是什么?它会把高级语言变成汇编语言还是机器语言,即二进制代码? 如果是后者,这是否意味着解释语言与介绍集没有关系? 一种语言只能有一个口译员?是因为解释器不做任何优化,所以我们不需要找到更好的解释器吗?

  • 问题内容: 我在下面有一个基本问题,可以帮助您理解python中的函数(紧接着uni的LPTHW教程)。有人可以解释以下语法,以及我的假设是否正确? 据我所知,是函数的名称,但什么是具有目的,括号旁边?是调用 下面的print命令吗?还是这些字符串直接进入命令? 问题答案: 将arg1,arg2放在括号中的目的是什么? 在这种情况下,和称为 arguments 。参数允许函数接收 输入 它的预期,