|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
源码长这样
- import time
- a = [10, 6, 8, 3, 7, 9, 1, 4, 2, 5]
- def time_master(func):
- def call_func():
- print("开始运行程序...")
- start = time.time()
- func()
- stop = time.time()
- print("结束运行程序...")
- print("共耗时%s" % (stop - start))
- return call_func
- @time_master
- def iterSum():
- s = 0
- for i in range(len(a)):
- s = s + a[i]
- return s
-
- iterSum()
复制代码
运行结果如下
- >>>
- ================ RESTART: C:\Users\Administrator\Desktop\迭代法.py ================
- 开始运行程序...
- 结束运行程序...
- 共耗时0.0
复制代码
s的结果55没有返回值,求帮助
本帖最后由 学习编程中的Ben 于 2023-8-17 11:46 编辑
【装饰器未起效的原因】
在给定的代码中,装饰器并没有正常起效,原因在于装饰器函数 time_master()没有正确地应用到被装饰的函数 iterSum()上。
修复代码时,请注意以下几点:
1. 在定义装饰器函数 time_master()时,需要将被装饰的函数作为参数传递给内部函数 call_func()。
2. 在使用装饰器时,需要在被装饰的函数 iterSum()前面添加 @time_master。
根据以上指导,下面是修复后的代码示例:
- import time
- a = [10, 6, 8, 3, 7, 9, 1, 4, 2, 5]
- def time_master(func):
- def call_func():
- print("开始运行程序...")
- start = time.time()
- result = func() # 调用被装饰的函数,并获取返回值
- stop = time.time()
- print("结束运行程序...")
- print("共耗时%s" % (stop - start))
- return result # 返回被装饰函数的返回值
- return call_func
- @time_master
- def iterSum():
- s = 0
- for i in range(len(a)):
- s = s + a[i]
- return s
- print(iterSum())
复制代码
代码修复后,装饰器就会正确地应用到 iterSum()函数上,同时能够打印出程序的耗时并返回结果。运行代码将得到以下输出:
- 开始运行程序...
- 结束运行程序...
- 共耗时0.0
- 55
复制代码
修复后的代码保留了原有功能,并能够成功地使用装饰器对函数进行修饰。如果还有其他问题,请随时提问。
如果回答对你有帮助,请给我一个最佳答案! 
|
|