装饰器

举报
建帅小伙儿 发表于 2022/09/25 02:06:48 2022/09/25
【摘要】 一、装饰器 在不改变函数逻辑的情况下,为函数添加额外功能 二、装饰器实现代码 先实现质数查询的函数 test_prime.py # coding=utf-8""" @Project :pachong-master @File :test_decorator.py @Aut...

一、装饰器

在不改变函数逻辑的情况下,为函数添加额外功能

二、装饰器实现代码

先实现质数查询的函数

test_prime.py


   
  1. # coding=utf-8
  2. """
  3. @Project :pachong-master
  4. @File :test_decorator.py
  5. @Author :gaojs
  6. @Date :2022/7/16 21:12
  7. @Blogs : https://www.gaojs.com.cn
  8. """
  9. import time
  10. def prime_number(num):
  11. """
  12. 计算是否是质数
  13. :return:
  14. """
  15. if num < 2:
  16. return False
  17. elif num == 2:
  18. return True
  19. else:
  20. for i in range(2, num):
  21. if num % i == 0:
  22. return False
  23. return True
  24. def count_prime_number(maxnumber):
  25. """
  26. 统计质数个数
  27. :return:
  28. """
  29. count = 0
  30. t1 = time.time()
  31. for i in range(2, maxnumber):
  32. if prime_number(i):
  33. count += 1
  34. print(count)
  35. t2 = time.time()
  36. print(f'***********************总共耗时 {t2 - t1} **************************')
  37. return count

未带装饰器执行结果

image-1657978385298

统计函数执行时长的装饰器


   
  1. def display_time(func):
  2. """
  3. 执行此函数耗时计算
  4. :param func:
  5. :return:
  6. """
  7. def wrapper(*args, **kwargs):
  8. t1 = time.time()
  9. result = func(*args, **kwargs)
  10. t2 = time.time()
  11. print('***********************总共耗时: {:.4} s **************************'.format(t2 - t1))
  12. return result
  13. return wrapper
  14. def prime_number(num):
  15. """
  16. 计算是否是质数
  17. :return:
  18. """
  19. if num < 2:
  20. return False
  21. elif num == 2:
  22. return True
  23. else:
  24. for i in range(2, num):
  25. if num % i == 0:
  26. return False
  27. return True
  28. @display_time
  29. def count_prime_number(maxnumber):
  30. """
  31. 统计质数个数
  32. :return:
  33. """
  34. count = 0
  35. for i in range(2, maxnumber):
  36. if prime_number(i):
  37. count += 1
  38. print(count)
  39. return count
  40. count = count_prime_number(9999)
  41. print(count)

带上装饰器的执行结果

image-1657978696721

三、装饰器总结

这里会用到args和kwargs, 如果函数有传参和返回值,则装饰器也要有参数和返回值


   
  1. def xx1(被装饰函数):
  2. def xx2(如果被装饰函数有参数那么输入):
  3. xxxxxxxxxxxxxxx
  4. 被装饰函数(如果被装饰函数有参数那么输入)
  5. xxxxxxxxxxxxxxx
  6. # 如果被装饰函数中含有reture则需要返回被装饰函数
  7. # 没有则不需要
  8. reture xx2

   
  1. def xx1(func):
  2. """
  3. 执行此函数耗时计算
  4. :param func:
  5. :return:
  6. """
  7. def xx2(*args, **kwargs):
  8. xxxxxxxxx
  9. # 如果函数fanc()有返回值,则需要接受返回值
  10. result = func(*args, **kwargs)
  11. xxxxxxxxx
  12. return result
  13. return wrapper

文章来源: blog.csdn.net,作者:懿曲折扇情,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_41332844/article/details/126837303

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。