资讯专栏INFORMATION COLUMN

python中用with关键字来实现上下文管理器.

Pocher / 3124人阅读

摘要:例子语句的语法什么语句可以作为变量是在哪里定义的呢应该返回一个上下文管理器所谓上下文管理器就是任何一个实现了和方法的的实例在对象中返回的内容会被赋值给变量直接用类进行构造的构造函数也可以用工厂方法建立以为例通常是调用方法建立的的实例的而在

例子
with open(r"somefileName") as somefile:
     for line in somefile:
            print line

with 语句的语法

with  [as ]:
     
     
什么语句可以作为, 变量是在哪里定义的呢?

应该返回一个上下文管理器,所谓上下文管理器就是任何一个实现了 __enter__(self) ,和__exit__(self, *unused)方法的class的实例.

__enter__(self)对象中返回的内容会被赋值给变量

直接用类进行构造的构造函数
class PypixContextManagerDemo:
    def __enter__(self):
        print "Entering the block"
    def __exit__(self, *unused):
        print "Exiting the block"
with PypixContextManagerDemo():
    print "In the block"
也可以用工厂方法建立

以MySQLdb为例,通常是调用MySQLdb.Connect方法建立的Connection的实例的.而在MySQLdb中Connect方法是这样实现的.

def Connect(*args, **kwargs):
    """Factory function for connections.Connection."""
    from MySQLdb.connections import Connection
    return Connection(*args, **kwargs)

而在Connection类中实现了__enter__(self) ,和__exit__(self, *unused)方法

class Connection(_mysql.connection):
.....................
    def __enter__(self):
            if self.get_autocommit():
                self.query("BEGIN")
            return self.cursor()
            
    def __exit__(self, exc, value, tb):
        if exc:
            self.rollback()
        else:
            self.commit()

注意__enter__方法直接返回了cursor对象,因此as后跟的就是一个cursor对象

with MySQLdb.connect(kwargs=Mysqldb_kwargs) as ins_cursor:
        ins_cursor.execute("select * from user")

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/37885.html

相关文章

  • 生成进化到协程 Part 2

    摘要:一个典型的上下文管理器类如下处理异常正如方法名明确告诉我们的,方法负责进入上下的准备工作,如果有需要可以返回一个值,这个值将会被赋值给中的。总结都是关于上下文管理器的内容,与协程关系不大。 Part 1 传送门 David Beazley 的博客 PPT 下载地址 在 Part 1 我们已经介绍了生成器的定义和生成器的操作,现在让我们开始使用生成器。Part 2 主要描述了如...

    fuyi501 评论0 收藏0
  • python高级特性

    摘要:常规的使用来统计一段代码运行时间的例子输出结果总结其实是一门特别人性化的语言,但凡在工程中经常遇到的问题,处理起来比较棘手的模式基本都有对应的比较优雅的解决方案。 python的高级特性 名词与翻译对照表 generator 生成器 iterator 迭代器 collection 集合 pack/unpack 打包/解包 decorator 装饰器 context manager ...

    yexiaobai 评论0 收藏0
  • Python有什么好学的》之下文管理

    摘要:引上下文管理器太极生两仪,两仪为阴阳。而最常用的则是,即上下文管理器使用上下文管理器用之后的文件读写会变成我们看到用了之后,代码没有了创建,也没有了释放。实现上下文管理器我们先感性地对进行猜测。现实一个上下文管理器就是这么简单。 Python有什么好学的这句话可不是反问句,而是问句哦。 主要是煎鱼觉得太多的人觉得Python的语法较为简单,写出来的代码只要符合逻辑,不需要太多的学习即可...

    qpwoeiru96 评论0 收藏0
  • Python中的下文管理和else块

    摘要:上下文管理器协议包含和两个方法。因此必要时在上下文管理器函数中使用语句防范错误。构建临时忽略指定异常的上下文管理器。这是个基类,用于定义基于类的上下文管理器。块结束时,按照后进先出的顺序调用栈中各个上下文管理器的方法。 导语:本文章记录了本人在学习Python基础之控制流程篇的重点知识及个人心得,打算入门Python的朋友们可以来一起学习并交流。 本文重点: 1、掌握if语句之外的el...

    Michael_Lin 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<