3
我認爲做是Python中的裝飾器,就像調用函數上的函數一樣?
@f
def g():
print 'hello'
是完全一樣的
def g():
print 'hello'
g=f(g)
但是,我有這個代碼,使用contextlib.contextmanager:
@contextlib.contextmanager
def f():
print 1
yield
print 2
with f:
print 3
其中工程和產量1 3 2
而當我試圖陳GE入
def f():
print 1
yield
print 2
f=contextlib.contextmanager(f)
with f:
print 3
我得到AttributeError: 'function' object has no attribute '__exit__'
我缺少什麼?在contextlib.contextmanager中是否存在一些黑魔法,還是我誤解了裝飾者的工作原理?
謝謝!理性的瞬間失效:) – olamundo 2010-06-19 07:47:29