由于差异我刚刚脱掉头发,我想知道Python 2.5中的差异究竟是什么.
我有两个代码块(dbao.getConnection()返回一个MySQLdb连接).
conn = dbao.getConnection()
with conn:
# Do stuff
Run Code Online (Sandbox Code Playgroud)
和
with dbao.getConnection() as conn:
# Do stuff
Run Code Online (Sandbox Code Playgroud)
我认为这些会有相同的效果,但显然不是conn后一版本的对象是一个Cursor.哪里光标来自并且是有办法的变量初始化,并声明以某种方式结合起来?
dF.*_*dF. 32
乍一看可能有点令人困惑,但是
with babby() as b:
...
Run Code Online (Sandbox Code Playgroud)
是不是等同于
b = babby()
with b:
...
Run Code Online (Sandbox Code Playgroud)
要了解原因,以下是上下文管理器的实现方式:
class babby(object):
def __enter__(self):
return 'frigth'
def __exit__(self, type, value, tb):
pass
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,名称b将绑定到从__enter__上下文管理器的方法返回的任何内容.这通常是上下文管理器本身(例如对于文件对象),但它不一定是; 在这种情况下,它是字符串'frigth',在您的情况下,它是数据库游标.
在第二种情况下,b是上下文管理器对象本身.