我知道装饰函数通常用于Python函数。
单行代码是否有类似的概念/语法?
示例:使用
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行代码的解决方案(当然是+函数的定义)。如果该解决方案需要两行以上的代码(即,比@measuretime
之类的代码要多),那么最好放弃并照常做:
start = time.time()
im = Image.open(BytesIO(base64.b64decode(data)))
print time.time() - start
答案 0 :(得分:4)
如果您想在一行代码之前和之后做一些事情,那么context manager将是合适的:
class HowToMap
{
private IEnumerable<Product> products;
private IEnumerable<Color> colors;
void Demo()
{
colors = products.SelectMany(r => r.Colors.Select(rr => new { r, rr.ColorEnum }))
.GroupBy(x => x.ColorEnum)
.Select(g => new Color { ColorEnum = g.Key, Products = g.Select(x => x.r).ToList() });
}
}
答案 1 :(得分:2)
不。装饰器基本上是一个函数,它将另一个函数用作参数并返回“装饰”函数。 @decorator只是一种语法糖。
答案 2 :(得分:1)
否,但是最接近您目标的是使用上下文管理器来覆盖一行代码。
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
答案 3 :(得分:0)
尽管您可以尝试查看jupyter
(以前称为ipython
),但该语言中没有这样的东西。它具有%%timeit
快捷方式。