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

Decorator-like syntax for a specific line of code

链接主题(但不重复):

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

单行代码有类似的concept/syntax吗?

示例:与

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

然后

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

会被解释为

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

备注:

没有。 Decorator 基本上是一个将另一个函数作为参数和 returns "decorated" 函数的函数。 @decorator 只是一个语法糖。

如果您想在一行代码前后做一些事情,context manager 是合适的:

from contextlib import contextmanager
import time

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

with measuretime():
    do_stuff()

语言中没有这样的东西,尽管您可以尝试查看 jupyter(以前称为 ipython)。它有 %%timeit 快捷方式。

不,但最接近您的目标的是使用上下文管理器来覆盖一行代码。

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