Python基础—装饰器(Day11)
装饰器
1.装饰器是在不改变原函数的执行的情况下为原函数增额外的功能。
简单版装饰器
import time
def func1():
print('执行速度')
def timmer(f):
start_time=time.time()
f()
time.sleep(0.3)
end_time=time.time()
print('此函数的执行效率%s'% (end_time-start_time))
f1=func1
func1=timmer
func1(f1)
import time
def timmer1(f): #f接收的是@timmer下面原函数的函数名func1
def inner():
f()
start_time=time.time()
time.sleep(0.3)
end_time=time.time()
print('此函数的执行效率%s' % (end_time - start_time))
return inner @timmer1
def func1():
print('测试速度') func1() 执行结果:
测试速度
此函数的执行效率0.30037736892700195
2.被装饰函数带参数的装饰器
# import time
# def timmer(f):#f=func1=inner
# def inner(*args,**kwargs):
# start_time=time.time()
# f(*args,**kwargs) #func1((*args,**kwargs))
# time.sleep(0.3)
# end_time=time.time()
# print('此函数的执行效率%s'% (end_time-start_time))
# return inner
# @timmer
# def func1(a,b,c,d): #timmer(func1)
# print(a,b,c,d)
# print('测试效率')
# func1(1,2,3,4)
3.装饰器模版
def wrapper(func):
def inner(*args,**kwargs):
ret=func(*args,**kwargs)
return ret
return inner @wrapper
def func(a,b):
print(666)
func(1,2,3)
4.带参数的装饰器
import time
def timmer(*args,**kwargs):
def wrapper(f):
def inner(*args,**kwargs):
if flag:
start_time=time.time()
ret=f(*args,**kwargs)
time.sleep(0.3)
end_time=time.time()
print('此函数的执行效率%f' %(end_time-start_time))
else:
ret=f(*args,**kwargs)
return ret
return inner
return wrapper
flag=True #flag=False 关掉装饰器
@timmer(flag) # 两步:1.把timmer(flag)当成一个普通话函数传给def timmer(),返回wrapper 2.变成@wrapper装饰器
def func1():
print(666)
func1() 执行结果:
666
此函数的执行效率0.300240
5.多个装饰器
def wrapper1(func):# func=f=inner1
def inner1():
print('wrapper1,before func') #2
func()
print('wrapper1,after func') #3
return inner1
def wrapper2(func): # func=inner1=inner2
def inner2():
print('wrapper2,before func') #1
func()
print('wrapper2,after func') #4
return inner2
@wrapper2 # f = wrapper2(f) 里面的f==inner1 外面的f == inner2
@wrapper1 # f = wrapper1(f) 里面的f==函数名f 外面的f == inner1
def f():# f=inner1
print('in f')
f() #f=inner1=inner2 执行结果:
wrapper2,before func
wrapper1,before func
in f
wrapper1,after func
wrapper2,after func
Python基础—装饰器(Day11)的更多相关文章
- python基础——装饰器
python基础——装饰器 由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数. >>> def now(): ... print('2015-3-25 ...
- python基础—装饰器
python基础-装饰器 定义:一个函数,可以接受一个函数作为参数,对该函数进行一些包装,不改变函数的本身. def foo(): return 123 a=foo(); b=foo; print(a ...
- python 基础——装饰器
python 的装饰器,其实用到了以下几个语言特点: 1. 一切皆对象 2. 函数可以嵌套定义 3. 闭包,可以延长变量作用域 4. *args 和 **kwargs 可变参数 第1点,一切皆对象,包 ...
- day5学python 基础+装饰器内容
基础+装饰器内容 递归特性# 1.必须有一个明确的结束条件# 2.每次进入更深一层递归时,问题规模相比上次递归应有所减少# 3.递归效率不高 def run(n): print(n) if int(n ...
- Python自动化 【第四篇】:Python基础-装饰器 生成器 迭代器 Json & pickle
目录: 装饰器 生成器 迭代器 Json & pickle 数据序列化 软件目录结构规范 1. Python装饰器 装饰器:本质是函数,(功能是装饰其它函数)就是为其他函数添加附加功能 原则: ...
- python基础 (装饰器,内置函数)
https://docs.python.org/zh-cn/3.7/library/functions.html 1.闭包回顾 在学习装饰器之前,可以先复习一下什么是闭包? 在嵌套函数内部的函数可以使 ...
- python基础-装饰器,生成器和迭代器
学习内容 1.装饰器 2.生成器 3.迭代器 4.软件目录结构规范 一:装饰器(decorator) 1.装饰器定义:本质就是函数,用来装饰其他函数,即为其他函数添加附加功能. 2.装饰器原则:1)不 ...
- python基础===装饰器@property 的扩展
以下来自Python 3.6.0 Document: class property(fget=None, fset=None, fdel=None, doc=None) Return a proper ...
- <Python基础>装饰器的基本原理
1.装饰器 所谓装饰器一般是对已经使用(上线)的函数增加功能. 但是因为一般的大公司的严格按照开放封闭原则(对扩展是开放的,对修改是封闭的),不会让你修改原本的函数. 装饰器就是在不改变原本的函数且不 ...
随机推荐
- 微信小程序配置域名的时候提示“校验文件验证失败”
在微信小程序后台配置web-view的业务域名跟扫普通链接二维码打开小程序两项功能时, 一直提示"校验文件验证失败,请下载校验文件,上传到服务器指定的目录" 实际访问校验文件的路径 ...
- HUAWEI网络设备恢复Console口密码
密码遗忘 本章介绍了Console口丢失的处理方法,建议用户妥善保管密码,并定期修改. 恢复Console口密码 设备提供如下方法恢复Console口密码.•方法一:通过STelnet/Telnet登 ...
- Python函数与lambda 表达式(匿名函数)
Python函数 一.函数的作用 函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码段 函数能提高应用的模块性和代码的重复利用率 python 内置函数:https://docs.pytho ...
- GIL全局解释器锁、死锁现象、python多线程的用处、进程池与线程池理论
昨日内容回顾 僵尸进程与孤儿进程 # 僵尸进程: 所有的进程在运行结束之后并不会立刻销毁(父进程需要获取该进程的资源) # 孤儿进程: 子进程正常运行 但是产生该子进程的父进程意外死亡 # 守护进程: ...
- win+ r 命令
Win 键+R calc:计算器 notepad:记事本 mspaint:画图 cmd:控制台 control:控制面板 desk.cpl:打开控制面板中的桌面设置 main.cpl:鼠标设置 ine ...
- 集合框架-LinkedList集合练习(堆栈和队列)
1 package cn.itcast.p2.linkedlist.test; 2 3 import java.util.LinkedList; 4 5 /* 6 * 请使用LinkedList来模拟 ...
- mybatis配置入门中遇到的问题
问题一 非法注射 问题描述:WARNING: An illegal reflective access operation has occurred 这种问题主要是jdk版本和mybatis的jar包 ...
- kubernetes集群各模块功能描述
Master节点: Master节点上面主要由四个模块组成,APIServer,schedule,controller-manager,etcd APIServer: APIServer负责对外提供R ...
- Homework_2
禁 止 吃 瓜 我是小鱼 刚才有个同学问我小鱼发生肾么事了 我说怎么回事? 给我发了一个张截图,我一看! 噢!原来是昨天发布第二次寒假作业了 我大一了啊没有闪 来!偷袭!我三岁的小同志 当时就流眼泪了 ...
- http中的8种请求介绍
HTTP协议的8种请求类型介绍 HTTP协议中共定义了八种方法或者叫"动作"来表明对Request-URI指定的资源的不同操作方式,具体介绍如下: OPTIONS:返回服务器针对特 ...