特定代码行的类似装饰器的语法

Bas*_*asj 3 python decorator python-decorators

链接主题(但不重复):装饰器对代码的特定行而不是整个方法进行计时?

我知道装饰器通常如何用于 Python 函数。

单行代码是否有类似的概念/语法?

示例:与

def measuretime(lineofcode):
    start = time.time()
    lineofcode()
    print time.time() - start
Run Code Online (Sandbox Code Playgroud)

然后

@measuretime
im = Image.open(BytesIO(base64.b64decode(data)))
Run Code Online (Sandbox Code Playgroud)

会被解释为

start = time.time()
im = Image.open(BytesIO(base64.b64decode(data)))
print time.time() - start
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 我知道像这样测量执行时间并不是最佳的,最好使用timeit等等,但这只是一个随机示例来展示我正在寻找的内容(单行代码的装饰器)

  • 我正在寻找 1 或 2 行代码解决方案(当然还有函数的定义)。如果解决方案需要超过 2 行代码(即超过类似的代码@measuretime),那么最好放弃并执行正常操作:

      start = time.time()
      im = Image.open(BytesIO(base64.b64decode(data)))
      print time.time() - start
    
    Run Code Online (Sandbox Code Playgroud)

use*_*ica 6

如果你想在一行代码之前和之后做一些事情,上下文管理器将是合适的:

from contextlib import contextmanager
import time

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

with measuretime():
    do_stuff()
Run Code Online (Sandbox Code Playgroud)