|
10鱼币
第一段代码,最后一句对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) 去掉,看看有什么结果
|
最佳答案
查看完整内容
虽然不知道你这么做的原因,假如你的问题是为什么有一个加了()有一个为什么没有加的话,你应该去在仔细看下修饰符的使用,或者参考Python cookbook [https://fishc.com.cn/thread-153981-1-1.html]
你要看懂末尾两行,作为装饰符的等价调用,套用到你的代码里面会发生什么。当然你也可以尝试,把第二段代码的 print(f) 去掉,看看有什么结果
|