Кажется я понял. Спасибо.
Декоратору передается объект функции с уже запакованной областью видимости.
var = 'glob'
def decor(func):
var = 'in_func decor'
def wripper():
var = 'in_func wripper'
print func.__globals__['var']
# return func()
return wripper
#xxx = decor(xxx)
@decor
def xxx():
print var
print xxx.__globals__['var']
xxx()
Возвращает
>>> glob
>>> glob
Тогда у меня возникает другой вопрос.
Если я хочу переопределить поведение функции передаваемой декоратору, можно поступить так?
var = 'glob'
def decor(func):
var = 'in_func decor'
def wripper():
var = 'in_func wripper'
func.__globals__['var'] = var
return func()
return wripper
#xxx = decor(xxx)
@decor
def xxx():
print var
print xxx.__globals__['var']
xxx()
возвращает
>>>glob
>>>in_func wrippe