У меня есть декоратор под названием Timer
, теперь в идеале использовать декоратор так:По требованию декоратора?
@Timer
def function(...):
return None
Однако это требует таймер все времяfunction
называется. Теперь, конечно, вы можете использовать декоратор как обычная функцию, чтобы сделать это, когда вы хотите вызвать его под конкретным экземпляром:
function = Timer(function)
Однако, это не выглядит очень (я придирчив, я знаю) , Итак, есть ли способ обернуть декоратор над функцией, чтобы сказать все варианты использования в тестовом файле или что-то еще? Так, что-то вроде:
from app import cheese
@Timer # Syntax error
cheese # Syntax error
Обратите внимание, что она использует только декоратор для этого файла, а не все время, если вы поставили его выше фактического определения функции.
декоратора синтаксиса может быть использован только до 'def' и' class'. есть ли какая-то причина, по которой вы не можете просто использовать desugared вариант? – SingleNegationElimination
@dequestarmappartialsetattr Нет, просто так, что он не выглядит очень красивым в моем коде, и если бы был лучший способ сделать это, тогда я хотел бы знать. –
Я могу только * предположить *, это нацелено на какой-то конкретный протокол обработки вызовов, указывающий на использование прецедента в таких случаях. Вероятно, это может быть сделано (для вашего собственного кода), в котором задействованы некоторые грязные фреймы стека и с некоторым временным штрафом (который может быть исключен из данных о производительности). OTOH, для этого есть крючки профиля. – jhermann