gpt4 book ai didi

Python 的 'with' 语句与 'with .. as'

转载 作者:太空狗 更新时间:2023-10-29 16:59:16 24 4
gpt4 key购买 nike

我刚刚因为一个不同而扯掉了我的头发,我想知道 Python 2.5 中真正的不同是什么。

我有两个代码块(dbao.getConnection() 返回一个 MySQLdb 连接)。

conn = dbao.getConnection()
with conn:
# Do stuff

with dbao.getConnection() as conn:
# Do stuff

我认为这些会产生相同的效果,但显然不是因为后一个版本的 conn 对象是一个 Cursor。游标是从哪里来的?有没有办法以某种方式将变量初始化和 with 语句结合起来?

最佳答案

乍一看可能有点乱,但是

with babby() as b:
...

等同于

b = babby()
with b:
...

要了解原因,上下文管理器的实现方式如下:

class babby(object):
def __enter__(self):
return 'frigth'

def __exit__(self, type, value, tb):
pass

在第一种情况下,名称 b 将绑定(bind)到从上下文管理器的 __enter__ 方法返回的任何内容。这通常是上下文管理器本身(例如文件对象),但不一定是;在本例中是字符串 'frigth',在您的例子中是数据库游标。

在第二种情况下,b 是上下文管理器对象本身。

关于Python 的 'with' 语句与 'with .. as',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/903557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com