2016-05-27 1 views
0

обычной конструкции для декоратора в питонапитон декоратор над чем-то другим, чем четкости

@decorator 
def function(x): 
    <code here> 

что эквивалентно

def function(x): 
    <code here> 
function = decorator(function) 

(По крайней мере, это мое понимание.) Теперь предположим, что мы даны функция mystery_func, которую мы не определили, но мы все равно хотели бы украсить decorator. Можем ли мы сделать

@decorator 
mystery_func 

или мы должны сделать

mystery_func = decorator(mystery_func) 

, чтобы получить тот же эффект, как

@decorator 
def mystery_func(args): 
    <code here> 
+4

Это не требует вопрос, вы могли бы просто проверил это в интерактивном интерпретаторе меньше времени, чем потребовалось чтобы составить вопрос. – ShadowRanger

+0

В случае, если у вас нет установки на Python, [Ideone] (http://ideone.com/) подходит для неинтерактивных тестов и [онлайн-вещь PythonAnywhere «Попробуйте IPython»] (https: // www. pythonanywhere.com/try-ipython/) предоставляет вам онлайн-среду IPython, которая обычно даже лучше, чем обычный интерактивный интерпретатор Python. – user2357112

+0

@ShadowRanger До сих пор остается актуальным вопрос, возможно, 'OP' не знал о декораторах класса, который является чем-то иным, чем' def' – jamylak

ответ

1

Ответ нет, синтаксис @ не может использоваться с произвольными линиями , вам необходимо использовать mystery_func = decorator(mystery_func). Использование синтаксиса @, например, это SyntaxError.

0

Вы также можете использовать class decorators, который "что-то другое, чем DEF":

например.

@foo 
@bar 
class A: 
    pass 

Но что вы упомянули здесь:

@decorator 
mystery_func 

является SyntaxError