当前位置: 首页 > wzjs >正文

大学学术建设专题网站关键词排名快速提升

大学学术建设专题网站,关键词排名快速提升,wordpress主题路径,中国目前最好的搜索引擎🧩 Python小练习系列 Vol.13:用装饰器记录函数执行时间 本节是 Python 小练习系列的一个子题,带你理解并动手写出一个能实用、可拓展的装饰器。 🎯 练习目标 理解 Python 装饰器(Decorator)的工作原理&…

🧩 Python小练习系列 Vol.13:用装饰器记录函数执行时间

本节是 Python 小练习系列的一个子题,带你理解并动手写出一个能实用、可拓展的装饰器。


🎯 练习目标

  • 理解 Python 装饰器(Decorator)的工作原理;
  • 学会使用 @ 装饰器语法糖;
  • 编写一个记录函数运行时间的装饰器;
  • 掌握 functools.wraps 的正确使用方式;
  • 探索装饰器进阶应用场景。

🧠 一分钟理解什么是装饰器

“不改原函数的代码,就能给它增加功能?”

是的!装饰器是 Python 中的一种语法糖,它其实是一个返回函数的函数。装饰器常用于日志记录、权限验证、性能统计、缓存等场景。

举个例子:

def greet():print("Hello!")# 给 greet 函数加个装饰器:
def shout_decorator(func):def wrapper():print("Before call!")func()print("After call!")return wrappergreet = shout_decorator(greet)
greet()

输出:

Before call!
Hello!
After call!

换成语法糖的写法就是:

@shout_decorator
def greet():print("Hello!")

💡 我们的练习:计时装饰器 @timeit

目标功能:

  • @timeit 装饰任意函数;
  • 执行前记录函数名;
  • 执行后打印运行时间(精确到毫秒);
  • 返回原函数的执行结果。

🔧 步骤 1:基础版装饰器

import timedef timeit(func):def wrapper(*args, **kwargs):print(f"⏱ 正在执行函数: {func.__name__}")start = time.time()result = func(*args, **kwargs)end = time.time()print(f"✅ 函数 {func.__name__} 执行完成,用时 {end - start:.4f} 秒")return resultreturn wrapper

用法示例:

@timeit
def add(a, b):time.sleep(0.5)return a + bprint(add(10, 20))

输出:

⏱ 正在执行函数: add
✅ 函数 add 执行完成,用时 0.5003 秒
30

⚠️ 步骤 2:加入 functools.wraps 避免元信息丢失

import functoolsdef timeit(func):@functools.wraps(func)def wrapper(*args, **kwargs):print(f"⏱ 正在执行函数: {func.__name__}")start = time.time()result = func(*args, **kwargs)end = time.time()print(f"✅ 函数 {func.__name__} 执行完成,用时 {end - start:.4f} 秒")return resultreturn wrapper

🧪 步骤 3:再测几个函数

@timeit
def multiply(a, b):time.sleep(0.8)return a * b@timeit
def say_hello(name):print(f"Hello, {name}!")multiply(3, 4)
say_hello("Python")

🚀 进阶挑战(可选)

1. 参数化装饰器(带参数的装饰器)

def timeit(verbose=True):def decorator(func):@functools.wraps(func)def wrapper(*args, **kwargs):if verbose:print(f"⏱ 正在执行函数: {func.__name__}")start = time.time()result = func(*args, **kwargs)end = time.time()if verbose:print(f"✅ 函数 {func.__name__} 执行完成,用时 {end - start:.4f} 秒")return resultreturn wrapperreturn decorator@timeit(verbose=False)
def fast_add(a, b):return a + b

2. 装饰异步函数(使用 asyncio

import asynciodef async_timeit(func):@functools.wraps(func)async def wrapper(*args, **kwargs):start = time.time()result = await func(*args, **kwargs)end = time.time()print(f"✅ 异步函数 {func.__name__} 执行完成,用时 {end - start:.4f} 秒")return resultreturn wrapper@async_timeit
async def async_task():await asyncio.sleep(1)asyncio.run(async_task())

📌 总结

技能点说明
@装饰器增强函数功能的利器
*args, **kwargs保证适配各种函数参数
functools.wraps保持原函数元信息
参数化装饰器更加灵活的扩展方式
异步函数装饰器用于 async def 函数的异步装饰器

📚 推荐练习拓展

  • 写一个权限检查装饰器(只允许 admin 用户执行函数);
  • 写一个函数缓存装饰器(简单 LRU 缓存);
  • 写一个失败自动重试的装饰器(异常自动重试 N 次);
  • 把多个装饰器组合使用,看函数执行顺序。

如果这篇内容对你有帮助,
欢迎 点赞 👍 | 收藏 ⭐ | 关注 ❤️
如果你有更好的想法,欢迎评论区留言分享~

http://www.dtcms.com/wzjs/61673.html

相关文章:

  • 布吉附近公司做网站建设多少钱百度怎么投放自己的广告
  • 无锡网站的建设免费网站制作平台
  • 北京百度关键词优化seo职业
  • 做网站被坑能找司法吗网站怎么申请怎么注册
  • 品牌学习网站全网整合营销推广
  • 自己做的网站怎么搜不到最新国际消息
  • 交友网站开发外贸推广优化公司
  • 阜阳做网站公司最新域名解析
  • 怀化市住房和城乡建设局网站赛雷猴是什么意思
  • 如何做电商运营推广推送者seo
  • 网站开发报价评估中央新闻直播今天
  • 辽宁工程新希望官网东莞排名优化团队
  • 合肥做个网站什么价格便宜2024近期新闻
  • 网站建设技术招聘网络营销怎么做推广
  • 做网站和做系统的区别一个新手怎么做推广
  • 网站怎么做查询功能郑州网站优化seo
  • 做reference的网站今日新闻十大头条内容
  • 成立网站要营业执照吗推广普通话的内容简短
  • 软件开发 系统开发 网站开发服务集团网站推广
  • 网站前台设计方案网站建站流程
  • 如何做购物网站的后台北京百度推广优化
  • 网站的友情连接怎么做软文发稿网站
  • 中国建筑行业网站aso优化的主要内容为
  • 微分销登录seo培训机构哪家好
  • 网站设计就业怎么样全国疫情实时动态
  • 做网站时默认字体是微软雅黑网络营销策略包括
  • 上海正规网站定制网络文章发布平台
  • 有什么网站是做投资的宁德市地图
  • 专业营销型网站建设网站开发软件有哪些
  • 男女插孔做暖暖网站大全广告推广平台网站有哪些