特定代码行的类似装饰器的语法
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
备注:
我知道像这样测量执行时间不是最优的,最好使用 timeit
,等等,但这只是一个随机示例来展示我正在寻找的东西(装饰器单行代码)
我正在寻找 1 或 2 行代码解决方案(当然是 + 函数定义)。如果解决方案需要超过 2 行代码(即超过 @measuretime
之类的代码),那么最好放弃并执行正常操作:
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
链接主题(但不重复):
我知道装饰器通常如何用于 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
备注:
我知道像这样测量执行时间不是最优的,最好使用
timeit
,等等,但这只是一个随机示例来展示我正在寻找的东西(装饰器单行代码)我正在寻找 1 或 2 行代码解决方案(当然是 + 函数定义)。如果解决方案需要超过 2 行代码(即超过
@measuretime
之类的代码),那么最好放弃并执行正常操作: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