Aplicando um decorador para uma function importada?

Eu quero importar uma function:

from random import randint 

e depois aplicar um decorador a ele:

 @decorator randint 

Eu queria saber se havia algum açúcar sintático para isso (como o que eu tenho acima), ou eu tenho que fazer da seguinte forma:

 @decorator def randintWrapper(*args): return random.randint(*args) 

Os decoradores são apenas açúcar sintático para replace um object de function por uma versão decorada, em que a decoração é apenas chamada (passando no object de function original). Em outras palavras, a syntax:

 @decorator_expression def function_name(): # function body 

aproximadamente (*) se traduz em:

 def function_name(): # function body function_name = decorator_expression(function_name) 

No seu caso, você pode aplicar seu decorador manualmente:

 from random import randint randint = decorator(randint) 

(*) Ao usar @ em uma function ou class, o resultado da def ou class não é ligado (atribuído ao seu nome no namespace atual) primeiro. O decorador é passado o object diretamente da pilha e somente o resultado da chamada do decorador é vinculado.