装饰器

"""
1、什么是装饰器
器指的是工具/功能
装饰指的是为被装饰对象添加额外的功能 大白话:定义装饰器就是定义了一个函数,该函数就是用来为其他函数添加额外的功能的 2、为何要用装饰器
程序的开发需要遵循一个原则:开放封闭原则
开放:指的是对拓展功能开放
封闭:指的是对修改源代码封闭 装饰器就是在不修改被装饰对象源代码以及调用方式的前提为被装饰对象添加上新功能 3、如何用装饰器 """
# 1、装饰器初探
'''
import time def index(x, y):
time.sleep(3)
print('index===>', x, y) # index(1,2) def home(name):
time.sleep(2)
print('home====>', name) # home("egon") def outter():
x = index def wrapper(a, b):
start_time = time.time()
x(a, b)
stop_time = time.time()
print("run time is :%s" % (stop_time - start_time)) return wrapper # 千万不要加括号 index = outter() # f=wrapper index(1, 2) # wrapper()
''' # 2、装饰器改进1
"""
import time def index(x, y):
time.sleep(3)
print('index===>', x, y) def home(name):
time.sleep(2)
print('home====>', name) def outter(x):
# x = home
def wrapper(*args,**kargs):
start_time = time.time()
x(*args,**kargs) # x("egon")
stop_time = time.time()
print("run time is :%s" % (stop_time - start_time))
return wrapper # 千万不要加括号 index = outter(index) # index=wrapper
home = outter(home) # home=wrapper index(1, 2) # wrapper(1,2)
home("egon") # wrapper("egon")
""" # 3、装饰器改进2
"""
import time def index(x, y):
time.sleep(3)
print('index===>', x, y)
return 456 def home(name):
time.sleep(2)
print('home====>', name)
return 123 def outter(x):
# x = home
def wrapper(*args, **kargs):
start_time = time.time()
res = x(*args, **kargs) # x("egon")
stop_time = time.time()
print("run time is :%s" % (stop_time - start_time))
return res
return wrapper # 千万不要加括号 index = outter(index) # index=wrapper
home = outter(home) # home=wrapper res1 = index(1, 2) # wrapper(1,2)
res2 = home("egon") # wrapper("egon")
print("====>",res1)
print("====>",res2) """ 装饰器语法糖
# 4、语法糖
"""
import time def outter(x):
# x = home
def wrapper(*args, **kargs):
start_time = time.time()
res = x(*args, **kargs) # x("egon")
stop_time = time.time()
print("run time is :%s" % (stop_time - start_time))
return res return wrapper # 千万不要加括号 @outter # index = outter(index) # index=wrapper
def index(x, y):
time.sleep(3)
print('index===>', x, y)
return 456 @outter # home = outter(home) # home=wrapper
def home(name):
time.sleep(2)
print('home====>', name)
return 123 res1 = index(1, 2) # wrapper(1,2)
res2 = home("egon") # wrapper("egon")
print("====>", res1)
print("====>", res2)
"""
import time # 5、装饰器的模板
"""
def outter(func):
def wrapper(*args, **kwargs):
res = func(*args, **kwargs)
return res
return wrapper def timmer(func):
def wrapper(*args, **kwargs):
start=time.time()
res = func(*args, **kwargs)
stop=time.time()
print(stop -start)
return res
return wrapper def auth(func):
def wrapper(*args, **kwargs):
name = input("请输入您的账号:").strip()
pwd = input("请输入您的账号:").strip()
if name == "egon" and pwd == "123":
print('登录成功')
res = func(*args, **kwargs)
return res
else:
print("账号密码错误")
return wrapper @auth
def index(x, y):
time.sleep(1)
print('index===>', x, y)
return 456 @auth
def home(name):
time.sleep(0.5)
print('home====>', name)
return 123 index(1,2)
home("egon")
""" # 最完整的模板
from functools import wraps def wrapper(f):
@wraps(f)
def inner(*args, **kwargs):
res = f(*args, **kwargs)
return res return inner 闭包函数查看文档
# 6、wraps
'''
from functools import wraps def timmer(func):
@wraps(func)
def wrapper(*args, **kwargs):
start=time.time()
res = func(*args, **kwargs)
stop=time.time()
print(stop -start)
return res
# wrapper.__name__ = func.__name__
# wrapper.__doc__ = func.__doc__
return wrapper @timmer # index=timmer(index) # index=wrapper
def index(x, y):
"""
这是index函数的文档注释
"""
time.sleep(1)
print('index===>', x, y)
return 456 # index(1,2)
# print(index.__name__)
help(index)
'''
												

day14总结的更多相关文章

  1. python_way day14 CSS

    python_way day14 CSS 层叠样式表 一.CSS作用域: 二.css标签选择器 三.css样式 一.css作用域: 基本用法:style="样式" <body ...

  2. Spark Streaming揭秘 Day14 State状态管理

    Spark Streaming揭秘 Day14 State状态管理 今天让我们进入下SparkStreaming的一个非常好用的功能,也就State相关的操作.State是SparkStreaming ...

  3. Python之路,Day14 - It's time for Django

    Python之路,Day14 - It's time for Django   本节内容 Django流程介绍 Django url Django view Django models Django ...

  4. 【JAVA零基础入门系列】Day14 Java对象的克隆

    今天要介绍一个概念,对象的克隆.本篇有一定难度,请先做好心理准备.看不懂的话可以多看两遍,还是不懂的话,可以在下方留言,我会看情况进行修改和补充. 克隆,自然就是将对象重新复制一份,那为什么要用克隆呢 ...

  5. 11.1 正睿停课训练 Day14

    目录 2018.11.1 正睿停课训练 Day14 A 字符串 B 取数游戏(贪心) C 魔方(模拟) 考试代码 B C 2018.11.1 正睿停课训练 Day14 时间:3.5h 期望得分:100 ...

  6. python学习 day14 (3月19日)----

    04 json # 1. 用于多种语言 交互 编程语言通用数据 # 内置的 不需要安装直接导入使用 import json # 导入 # # dumps loads dump load # dic = ...

  7. day13,day14

    day13 迭代器 什么是迭代器? 迭代:是一个重复的过程,每一次重复,都是基于上一次的结果而进行的 器:迭代取值的工具 为何要用迭代器? 迭代器提供了一种通用的不依赖于索引的迭代取值方式 如何用迭代 ...

  8. day14(xml 编写及解析)

    编写 xml的组成: 1.文档的声明 <?xml version='1.0' encoding='UTF-8' standalone='yes'> xml 表示标签的名字 encoding ...

  9. python开发学习-day14(jquery、ajax等)

    s12-20160421-day14 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...

  10. day14(编码实战-用户登录注册)

    day14 案例:用户注册登录 要求:3层框架,使用验证码   功能分析 注册 登录   1.1 JSP页面 regist.jsp 注册表单:用户输入注册信息: 回显错误信息:当注册失败时,显示错误信 ...

随机推荐

  1. [原创][开源] SunnyUI.Net 字体图标

    SunnyUI.Net, 基于 C# .Net WinForm 开源控件库.工具类库.扩展类库.多页面开发框架 Blog: https://www.cnblogs.com/yhuse Gitee: h ...

  2. 01.Markdown学习

    Markdown学习 一.标题 在想要设置为标题的文字前面加#来表示(#后面有空格) 一个#是一级标题,二个#是二级标题,以此类推.支持六级标题. 示例: # 这是一级标题 ## 这是二级标题 ### ...

  3. conda 管理包

    查看当前环境已经安装的包 conda list 查看指定环境中的安装包 conda list -n python27 在Anaconda 库中搜索包 conda search numpy #模糊搜索 ...

  4. mysql日期和时间类型

    TIME 类型 TIME 类型用于只需要时间信息的值,在存储时需要 3 个字节.格式为 HH:MM:SS.HH 表示小时,MM 表示分钟,SS 表示秒. TIME 类型的取值范围为 -838:59:5 ...

  5. ca13a_c++_顺序容器的操作6删除元素

    /*ca13a_c++_顺序容器的操作6删除元素c.erase(p) //删除迭代器p指向的位置c.erase(b,e) //删除b to e之间的数据,迭代器b包括,e不包括c.clear()//删 ...

  6. 用VC++6.0,双击主对话框中的按钮时,不能跳转到代码处

    1. 首先在项目中--[生成]build--[清除解决方案]clean 2. 关闭项目 3. 删除项目中的[Debug]下所有文件 4. 把*.aps,*.clw,*.ncb,*.opt删掉----- ...

  7. Linux监控CPU,内存,磁盘I/O

    简单讲讲Linux下监控 [CPU] 监控CPU,top命令能够实时监控系统的运行状态,并且可以按照CPU.内存和执行时间进行排序,同时top命令还可以通过交互式命令进行设定显示,通过top命令可以查 ...

  8. Quartz.Net系列(七):Trigger之SimpleScheduleBuilder详解

    所有方法图 1.SimpleScheduleBuilder RepeatForever:指定触发器将无限期重复. WithRepeatCount:指定重复次数 var trigger = Trigge ...

  9. python django mkdir和makedirs的用法

    总结一下mkdir和makedirs的用法:      1.mkdir( path [,mode] )      作用:创建一个目录,可以是相对或者绝对路径,mode的默认模式是0777.      ...

  10. redis高级命令4 持久化机制 、事务

    redis的事务是支持很简单,基本没有啥用我们来看下面的列子 我们开启一个事务,在事务中执行了age 加1,set a4 ,还有对一个字符串进行加一,对字符串加1导致了事务失败,按道理incr age ...