python的装饰器很有用吗_你真的了解python装饰器么
合理使用装饰器可以简化开发,并且使得代码更加清晰。下面我们分别介绍两种装饰器,不带参数的装饰器和带参数的装饰器。
一、不带参数的装饰器
我们用一个实际的例子来引入装饰器的概念,比如我们现在有一个方法A(),然后我们需要在方法A()执行之前在终端打印"function is running",这时候我们可以在方法A()的开始部分加上下面的代码:print("function is running")
但是如果我们不想修改方法A()的代码,也可以重新写一个方法decorator(),然后把A()作为入参,代码如下:def decorator(fun):
@functools.wraps(fun)
def wrapper(*args, **kwargs):
print("Method is running")
return fun()
return wrapper
python中的方法可以作为参数传入另一个方法,所以当我们执行decorator(A)的时候,返回的是一个方法,这个方法的本质是先执行print语句,然后再执行A()。
但是这样我们的调用代码就需要进行修改,也就是说之前调用方法A(),现在的写法是调用decorator(A)(),为了不影响调用的代码,我们使用python的语法糖改造方法A()的代码。@decorator
def A():
# do something
实际上只是在A()的前面加上一行@decorator,这样在我们的调用代码就不需要改变了。
装饰器中的@functools.wraps(fun)是为了保证返回的方法__name__属性和入参方法fun的__name__属性相同。
二、带入参的装饰器
在上面不带参数的装饰器中,我们实现了在执行方法A()之前打印一行固定的字符串,如果我们想要打印不同的字符串就需要用带参数的装饰器。实际上就是在不带参数的装饰器上再封装一层即可,代码如下:def decorator_par(name):
def decorator(fun):
@functools.wraps(fun)
def wrapper(*args, **kwargs):
print("Method {} is running".format(name))
return fun()
return wrapper
return decorator
这样我们就可以在使用装饰器的时候设置参数name,实现打印不同的信息。完整的代码如下:import functools
def decorator_par(name):
def decorator(fun):
@functools.wraps(fun)
def wrapper(*args, **kwargs):
print("Method {} is running".format(name))
return fun()
return wrapper
return decorator
@decorator_par("A")
def A():
print("I am A")
@decorator_par("B")
def B():
print("I am B")
A()
B()
执行输出为:Method A is running
I am A
Method B is running
I am B
可以看到我们在不改变方法调用代码的情况下,实现了在该方法之前打印特定的信息。
以上就是装饰器的两种实现示例,实际开发中也可以将多个装饰器进行嵌套,可以实现更加复杂的需求。
python的装饰器很有用吗_你真的了解python装饰器么相关推荐
- 新媒体学python有用吗_你真的不学Python吗?学习Python的四大理由!
在众多人的脑海中,Python无非就是一门编程语言而已,并没有什么特色,但是提及学习编程大部分人都会推荐Python,为什么?今天就给你说说学习Python的四大理由吧. 首先先来了解一下什么是Pyt ...
- python做脚本语言要了解什么_你真的了解Python吗?本文可以让你对Python了解更深入...
人们为什么使用Python? 之所以选择Python的主要因素有以下几个方面:软件质量:在很大程度上,Python更注重可读性.一致性和软件质量,从而与脚本语言世界中的其他工具区别开发.此外,Pyth ...
- python对非it上班族有用吗_非专业人士学Python有用吗?
当然有用啦!!! 说个真实的故事 有个朋友,曾经在某国内零售民企工作,做的是销售管理,也就是运营岗位,每天的工作就是用Excel做下销售数据,跟进线下销售情况,工作中最有技术含量不过于用个vlooku ...
- python使用复合语句def创建函数对象_【收藏】Python实用技巧-成为Pythoner必经之路...
前言 本文主要记录 Python 中一些常用技巧,所描述的是告诉你怎么写才是更好? 如果你并不熟悉Python语法,希望你能在下面代码片段中看到Python的简单.优雅; 如果你象我这样,对 Pyt ...
- 老男孩python全栈9期全套视频_[全套视频] 老男孩Python全栈7期:Flask全套组件及原理剖析视频教程,全套视频教程学习资料通过百度云网盘下载...
目录├─1398 T* * I K, E% T│ ├─01 python fullstack s7day139 课前分享之找一个对标的人.mp4│ ├─02 python fullstack s7da ...
- python中意外缩进是什么意思_语法错误 - 如何处理python中的“意外缩进”?
语法错误 - 如何处理python中的"意外缩进"? 如何纠正python中的"意外缩进"错误? 15个解决方案 116 votes Python在行的开头使用 ...
- python语言有几种编程方式_零基础自学python语言,有哪几种方法?龟叔说:这套教程带你入门...
第一我要说的是:你应该先了解python语言的起源,这句话对于自学python的小白来说,本身就是耍流氓. 我们从根源上分析这个问题,这个问题是(从零基础如何自学python编程)? 我的提取关键字: ...
- python适用场景_你真的了解Python吗?什么场景使用多线程,什么场景使用多进程?...
引言 涉及并发的场景,大家想到使用多线程或多进程解决并发问题; 一般情况下,解决多并发场景问题,多数语言采用多线程编程模式(线程是轻量级的进程,共用一份进程空间). 也同样适用于Python多并发处理 ...
- 学python还是不会编程_你真的不学Python吗?学习Python的四大理由!
在众多人的脑海中,Python无非就是一门编程语言而已,并没有什么特色,但是提及学习编程大部分人都会推荐Python,为什么?今天就给你说说学习Python的四大理由吧. 首先先来了解一下什么是Pyt ...
最新文章
- linux mysql远程连接其他服务器_Linux服务器中MySQL远程连接的开启方法
- jdk安装教程_使用JDK 8流在包装对象的集合和包装对象的集合之间转换
- 如何在C++中调用python程序?
- 【VMCloud云平台】SCAP(一)规划
- TensorFlow HOWTO 4.1 多层感知机(分类)
- python中的pickle解析
- 干货|别找了,分享80个无版权、高清、免费图片素材网站给你!
- 【电子产品】Fast FWR200 公司使用设备人数超过20个后,之后的设备无法上网
- 医咖会SPSS免费教程学习笔记—Fisher精确检验
- 大数据自助分析平台系列文章(深入讲解由零开始设计一个大数据自助分析平台)
- 篮球赛日程表_横县校椅青桐2019春节篮球赛火热开赛!快收好赛程表!
- 四步骤搞定专属PE系统【xitongshoucang.com】
- 【BZOJ 1006】 [HNOI2008]神奇的国度
- Z(zombie)僵尸进程和孤儿进程
- (CVE-2020-11800)Zabbix_Server_trapper_命令注入漏洞
- 图像增广 || 通过仿射变换实现图像的平移、缩放、旋转、翻转、错切,及MATLAB实现与分析
- DDR中bank,die,rank,channel的概念
- ajax提交多个form表单
- javascript 实现生成GUID / UUID的多种方法
- 【elasticsearch】elasticsearch教程 es整合springboot教程 kibana安装教程 解决kibana访问404