第一段代码,最后一句对f函数的引用需要加():import time
class timeslong(object):
def __init__(self,func):
self.f = func
def __call__(self):
start = time.clock()
print("It's time starting ! ")
self.f()
print("It's time ending ! ")
end = time.clock()
return "It's used : %s ." % (end - start)
@timeslong
def f():
y = 0
for i in range(10):
y = y + i + 1
print(y)
print(f())
第二段代码,最后一句对f函数的引用没有加():import time
def call(func):
start = time.perf_counter()
print("It's time starting ! ")
func()
print("It's time ending ! ")
end = time.perf_counter()
return "It's used : %s ." % (end - start)
@call ##修饰会自动将下面的部分作为一个参数导入到call函数中
def f():
y = 0
for i in range(10):
y = y + i + 1
print(y)
print(f)
本帖最后由 Stubborn 于 2020-3-18 03:40 编辑
虽然不知道你这么做的原因,假如你的问题是为什么有一个加了()有一个为什么没有加的话,你应该去在仔细看下修饰符的使用,或者参考Python cookbook [ https://fishc.com.cn/thread-153981-1-1.html]
import time
from functools import wraps
def timethis(function):
@wraps(function)
def wrapper(*args, **kwargs):
start = time.time()
function(*args, **kwargs)
print(function.__name__, start - time.time())
return wrapper
def downout(n):
while n > 0:
n -= 1
downout = timethis(downout)
downout(10000)
你要看懂末尾两行,作为装饰符的等价调用,套用到你的代码里面会发生什么。当然你也可以尝试,把第二段代码的 print(f) 去掉,看看有什么结果
|