Декоратор-подобный синтаксис для конкретной строки кода - PullRequest
0 голосов
/ 28 июня 2018

Я знаю, как декораторы обычно используются для функций Python.

Существует ли аналогичная концепция / синтаксис для отдельных строк кода?

Пример: с

def measuretime(lineofcode):
    start = time.time()
    lineofcode()
    print time.time() - start

1010 * тогда *

@measuretime
im = Image.open(BytesIO(base64.b64decode(data)))

будет интерпретироваться как

start = time.time()
im = Image.open(BytesIO(base64.b64decode(data)))
print time.time() - start

Примечания:

  • Я знаю, что время выполнения измерения не является оптимальным, лучше использовать timeit и т. Д., Но это просто случайный пример, показывающий, что я ищу (декораторы для отдельные строки кода)

  • Я ищу решение для 1 или 2 строк кода (+ определение функции, конечно). Если решение занимает более 2 строк кода (то есть больше, чем что-то вроде @measuretime), то, вероятно, лучше отказаться и просто сделать обычное:

    start = time.time()
    im = Image.open(BytesIO(base64.b64decode(data)))
    print time.time() - start
    

Ответы [ 4 ]

0 голосов
/ 28 июня 2018

Нет, но самой близкой к вашей цели было бы использование диспетчера контекста для покрытия одной строки кода.

import time

class timer(object):
    def __enter__(self):
        self.start = time.clock()
        return self

    def __exit__(self, *args):
        self.end = time.clock()
        self.interval = self.end - self.start
        print(self.interval)

with timer():
    [i for i in range(100000)]

На моем компьютере выводится следующее:

0.005583688506699192
0 голосов
/ 28 июня 2018

Если вы хотите что-то делать до и после строки кода, подойдет менеджер контекста :

from contextlib import contextmanager
import time

@contextmanager
def measuretime():
    start = time.time()
    try:
        yield
    finally:
        print(time.time() - start)

with measuretime():
    do_stuff()
0 голосов

В языке нет такой вещи, хотя вы можете попробовать посмотреть на jupyter (ранее известный как ipython). Он имеет %%timeit ярлык.

0 голосов
/ 28 июня 2018

Нет. Декоратор - это функция, которая принимает в качестве аргумента другую функцию и возвращает «украшенную» функцию. @decorator - это просто синтаксический сахар.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...