python-装饰器的最终形态和固定格式 语法糖
import time
def timer(f): # 这是一个装饰器函数
def inner():
start = time.time()
f() # 被装饰的函数
end = time.time()
print('函数执行了%d秒' %(end-start) )
return inner
@timer # 语法糖 @装饰器函数名
def func(): # 被装饰的函数
time.sleep(3)
print('这是一个函数执行的内容')
func()
装饰带参数函数的装饰器
import time
def timer(f): # 这是一个装饰器函数
def inner(*args,**kwargs):
start = time.time()
ret = f(*args,**kwargs) # *args,表示打散元组中每个元素传递
end = time.time()
print('函数执行了%s秒' %(end-start) )
return ret
return inner
# 两个参数传递,按位置传递参数方式 *args就可以解决
@timer # 语法糖 @装饰器函数名
def func(a,b): # 被装饰的函数
time.sleep(0.02)
print('同志们',a,b)
return '新年好' # 一个位置参数,*args就能传递
@timer # 语法糖 @装饰器函数名
def func1(a): # 被装饰的函数
time.sleep(0.02)
print('同志们',a)
return '新年好' # 如果赋值传递则需要**kwargs来解决
@timer # 语法糖 @装饰器函数名
def func2(a,b=2): # 被装饰的函数
time.sleep(0.02)
print('同志们',a,b)
return '新年好' ret = func(1,2)
ret1 = func1(1)
ret2 = func2(1)
print(ret,ret1,ret2)
装饰器的固定格式
def wrapper(f): # 这是一个装饰器函数
def inner(*args,**kwargs):
ret = f(*args,**kwargs) # *args,**kwargs表示打散元组中每个元素传递
return ret
return inner
@wrapper
def func(a,b): # 被装饰的函数,可以传递参数
print('这是函数主体',a,b) ret = func(1,2) # 这里执行的是inner

python-装饰器的最终形态和固定格式 语法糖的更多相关文章
- Python 装饰器学习心得
最近打算重新开始记录自己的学习过程,于是就捡起被自己废弃了一年多的博客.这篇学习笔记主要是记录近来看的有关Python装饰器的东西. 0. 什么是装饰器? 本质上来说,装饰器其实就是一个特殊功能的函数 ...
- 总结了11条,我对Python 装饰器的理解
对于每一个学习 Python 的同学,想必对 @ 符号一定不陌生了,正如你所知, @ 符号是装饰器的语法糖,@符号后面的函数就是我们本文的主角:装饰器. 装饰器放在一个函数开始定义的地方,它就像一顶帽 ...
- 一篇文章搞懂Python装饰器所有用法
01. 装饰器语法糖 如果你接触 Python 有一段时间了的话,想必你对 @ 符号一定不陌生了,没错 @ 符号就是装饰器的语法糖. 它放在一个函数开始定义的地方,它就像一顶帽子一样戴在这个函数的头上 ...
- (十)Python装饰器
装饰器:本质就是函数,功能是为其他函数添加附加功能. 两个原则: 1.不修改被修饰函数的源代码 2.不修改被修饰函数的调用方式 一个栗子 def test(): res = 0 for i in ra ...
- python装饰器理解
1.装饰器的作用 在不修改被装饰对象的源代码以及调用方式的前提下为被装饰对象添加新功能 原则: 1.不修改被装饰对象的源代码2.不修改被装饰对象的调用方式 目标: 为被装饰对象添加新功能 2.装饰器的 ...
- 如何理解Python装饰器
如何理解Python装饰器?很多学员对此都有疑问,那么上海尚学堂python培训这篇文章就给予答复. 一.预备知识 首先要理解装饰器,首先要先理解在 Python 中很重要的一个概念就是:“函数是 F ...
- python装饰器的详细解析
什么是装饰器? python装饰器(fuctional decorators)就是用于拓展原来函数功能的一种函数,目的是在不改变原函数名(或类名)的情况下,给函数增加新的功能. 这个函数的特殊之处在于 ...
- Python装饰器的调用过程
在Python学习的过程中,装饰器是比较难理解的一个应用.本人也在学习期间也遇到很多坑,现将装饰器的基本调用过程总结一下. 首先,装饰器用到了“闭包”,而“闭包”是学习装饰器的基础,所以在讲装饰器之前 ...
- Python装饰器--decorator
装饰器 装饰器实质是一个函数,其作用就是在不改动其它函数代码的情况下,增加一些功能.如果我们需要打印函数调用前后日志,可以这么做 def log(func): print('%s is running ...
随机推荐
- 强化学习(二)马尔科夫决策过程(MDP)
在强化学习(一)模型基础中,我们讲到了强化学习模型的8个基本要素.但是仅凭这些要素还是无法使用强化学习来帮助我们解决问题的, 在讲到模型训练前,模型的简化也很重要,这一篇主要就是讲如何利用马尔科夫决策 ...
- 【面试】足够应付面试的Spring事务源码阅读梳理(建议珍藏)
Starting from a joke 问:把大象放冰箱里,分几步? 答:三步啊,第一.把冰箱门打开,第二.把大象放进去,第三.把冰箱门带上. 问:实现Spring事务,分几步? 答:三步啊,第一. ...
- 关于Exceptionless的使用注意
大家都应该比较熟悉NLOG,我们知道log4net和nlog,也有其它的记日志框架.目前我们的生产环境使用nlog,而且对Exceptionless的对接也是无缝的.可能有人会问为什么不用ELK,主要 ...
- Docker+SpringBoot远程发布
Docker+SpringBoot远程发布 发布成功后启动: docker run -di --name demo1.1 -p 8080:8085 demo:1.0 docker run 命令大全:h ...
- css3动画--位移加阴影
animation: name duration timing-function delay iteration-count direction; 值 描述 animation-name 规定需要绑定 ...
- Nginx日志常用统计分析命令
IP相关统计 统计IP访问量(独立ip访问数量) awk '{print $1}' access.log | sort -n | uniq | wc -l 查看某一时间段的IP访问量(4-5点) gr ...
- Basic Linux Privilege Escalation
(Linux) privilege escalation is all about: Collect - Enumeration, more enumeration and some more enu ...
- 升鲜宝V2.0_生鲜配送行业,对生鲜配送系统开发与实施的深度对比与思考_升鲜宝生鲜配送系统_15382353715_余东升
升鲜宝V2.0_生鲜配送行业,对生鲜配送系统开发与实施的深度对比与思考_升鲜宝生鲜配送系统_15382353715_余东升 笔者从事生鲜配送软件开发接近10年,前前后后研究了很多 ...
- iOS---------获取当前年份
NSDate * senddate=[NSDate date]; NSDateFormatter *dateformatter=[[NSDateFormatter alloc] init]; [d ...
- 利用AccessibilityService自动获取微信号(Android)
前言: 最近遇到一个需求,要求写一个小插件,能够自动在微信的页面弹出一个窗口,展示用户的相关信息(与我们公司有关的信息,方便运营快速了解用户信息). 当时我第一反应是不可能,如果能够在别的app中获取 ...