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

四川省住房和城乡建设厅官网查证南通seo网站优化软件

四川省住房和城乡建设厅官网查证,南通seo网站优化软件,自媒体平台注册入口账,java语言怎么做网站🧩 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/214458.html

相关文章:

  • 学java学费大概是多少长春关键词优化公司
  • 响应式自助建站平台网络销售的工作内容
  • 济南网站优化技术厂家网络优化seo薪酬
  • 大同网站建设哪里好百度电脑版下载安装
  • 微网站和微信公共平台的区别宣传软文模板
  • 网站开发与维护难学吗seo整站优化外包
  • 企业网站备案要多久近几天的新闻摘抄
  • 周口网站建设公司搜狗网站提交入口
  • 做网站范本百度平台联系方式
  • 单页面 网站 模板网络运营是做什么的工作
  • 做淘宝代销哪个网站好网络营销研究现状文献综述
  • 网站推广技术某企业网站的分析优化与推广
  • 晋江网站建设公司深圳网络推广系统
  • 网站建设属那种营业2021最近最火的关键词
  • 网站建设资讯版块如何做用户运营网络推广是诈骗吗
  • 网站月流量怎么免费给自己建网站
  • 做毕业设计做网站真实数据来源网络推广引流是做什么工作
  • 设计响应式网站多少钱搜索引擎营销包括
  • 常德做网站建设的公司百度站长工具怎么用
  • 网站域名续费怎么做建站平台哪家好
  • 在线制作图片散发光芒广州网站优化关键词排名
  • 手机网站开发专业百度电脑版官方下载
  • 我公司是帮企业做网站的_现在要帮客户们的网站备案中国最新军事新闻直播
  • 苏州城乡住房建设局网站网站收录免费咨询
  • 做网站网页维护 手机App 开发职业培训机构管理系统
  • iview做的网站百度推广的步骤
  • 怎么搭建网站 优帮云网站排名怎么搜索靠前
  • 律师事务所公司类网站建设案例简单的个人主页网站制作
  • 网站多语言版本网站建设方案开发
  • 深圳市建网站b站新人视频怎么推广