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

Python小知识 - 1. Python装饰器(decorator)

  1. Python装饰器(decorator)

Python装饰器是一个很有用的功能,它可以让我们在不修改原有代码的情况下,为已有的函数或类添加额外的功能。

常见的使用场景有:

a. 函数缓存:对于一些计算量较大的函数,我们可以使用装饰器对其进行缓存,从而避免重复计算。

b. 日志记录:我们可以使用装饰器打印函数的调用日志,从而更好地了解代码的执行情况。

c. 性能测试:我们可以使用装饰器对函数进行性能测试,从而找出执行效率较低的代码。

下面我们就来学习如何使用Python装饰器。

首先,我们来看一个简单的例子。我们要为函数 say_hello 添加一个功能,即在函数执行前后分别打印一行日志,代码如下:

def say_hello(): print("Hello, world!")

say_hello()

执行结果如下:

Hello, world!

现在,我们使用装饰器来实现上面的功能。首先,我们定义一个函数 log,用于打印日志,代码如下:

def log(func): def wrapper(args, kw): print("call %s():" % func.name) return func(args, **kw) return wrapper

然后,我们使用该函数来装饰 say_hello 函数,代码如下:

@log def say_hello(): print("Hello, world!")

say_hello()

执行结果如下:

call say_hello():

Hello, world!

可以看到,我们在不修改 say_hello 函数的情况下,就为其添加了额外的功能。

需要注意的是,在使用装饰器时,我们要注意函数的参数。如果装饰的函数需要接收参数,那么我们就需要在 log 函数中添

顺便介绍一下我的另一篇专栏, 《100天精通Python - 快速入门到黑科技》专栏,是由 CSDN 内容合伙人丨全站排名 Top 4 的硬核博主 不吃西红柿 倾力打造。 基础知识篇以理论知识为主,旨在帮助没有语言基础的小伙伴,学习我整理成体系的精华知识,快速入门构建起知识框架;黑科技应用篇以实战为主,包括办公效率小工具、爬虫、数据分析、机器学习、计算机视觉、自然语言处理、数据可视化等等,让你会用一段简单的Python程序,自动化解决工作和生活中的问题,甚至成为红客。

🍅 订阅福利原价299,限时1折订阅专栏进入千人全栈VIP答疑群,作者优先解答机会(代码指导/学习方法指引),群里大佬可以抱团取暖(大厂/外企内推机会)

🍅 订阅福利:简历指导、招聘内推、80G全栈学习视频、300本IT电子书:Python、Java、前端、大数据、数据库、算法、爬虫、数据分析、机器学习、面试题库等等

🍅 专栏地址: 点击《100天精通Python - 快速入门到黑科技》

100天精通Python - 订阅福利

http://www.lryc.cn/news/153735.html

相关文章:

  • 如何访问GitHub
  • 【广州华锐互动】智能变电站AR仿真实训系统大大提高培训的效率和质量
  • 手写Mybatis:第11章-流程解耦,封装结果集处理器
  • 金融风控数据分析-信用评分卡建模(附数据集下载地址)
  • ceph对象三元素data、xattr、omap
  • 使用 BERT 进行文本分类 (03/3)
  • Leetcode Top 100 Liked Questions(序号236~347)
  • MySQL数据库学习【基础篇】
  • Kubernetes技术--k8s核心技术Service服务
  • OpenHarmony 应用 ArkUI 状态管理开发范例
  • 二、QTableWidget 类 clear() 和 clearContents() 的区别及程序崩溃原因分析
  • spring boot 项目中搭建 ElasticSearch 中间件 一 postman 操作 es
  • 设计模式—观察者模式(Observer)
  • 分类算法系列③:模型选择与调优 (Facebook签到位置预测)
  • PCL RANSAC分割提取多个空间圆
  • Java八股文学习笔记day01
  • vant的NavBar导航栏可以自定义背景图片吗
  • 深入浅出AXI协议(5)——数据读写结构读写响应结构
  • IntelliJ Idea开发Vue遇到的几个问题
  • sql查找最晚一天/日期最大的一条记录 两种方法
  • 详解python的
  • Modbus TCP通信笔记
  • CIM和websockt-实现实时消息通信:双人聊天和消息列表展示
  • useLayoutEffect和useEffect有什么作用?
  • django中配置使用websocket终极解决方案
  • 敦煌网、Jumia等跨境电商平台怎么测评(补单)留评?
  • uni-app之android离线打包
  • 【传输层】TCP -- 三次握手四次挥手 | 可靠性与提高性能策略
  • 前端将UTC时间格式转化为本地时间格式~~uniapp写法
  • 说说Kappa架构