装饰器

"""
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. 基于华为云IOT及无线RFID技术的智慧仓储解决方案最佳实践系列一

    [摘要]仓储管理存在四大细分场景:出入库管理.盘点.分拣和货物跟踪.本系列将介绍利用华为云IOT全栈云服务,端侧采用华为收发分离式RFID解决方案,打造端到端到IOT智慧仓储解决方案的最佳实践. 仓储 ...

  2. redis 深入理解redis 主从复制原理

    redis 主从复制 master 节点提供数据,也就是写.slave 节点负责读. 不是说master 分支不能读数据,也能只是我们希望将读写进行分离. slave 是不能写数据的,只能处理读请求 ...

  3. git新手入门问题总结

    git新手入门问题总结 前言 本人为2019年6月份刚刚毕业,大三暑假中旬来到上海,实习时间大致为十个月,在这十个月里面学到了许多关于git使用方面的知识 经常会逛开源中国水水动态,看看技术帖子学习知 ...

  4. STL容器操作

    目录 1. 数组 2. Vector 3. List 3.1. std::forward_list 4. Tuple 4.1. 运行期索引 4.2. 元组合并 4.3. 元祖遍历 5. Pair 6. ...

  5. (一)TestNG-常用注解参数

    原文:https://www.cnblogs.com/starstarstar/p/11305733.html 注解@Test标签 package com.course.testng; import ...

  6. [源码解析] GroupReduce,GroupCombine 和 Flink SQL group by

    [源码解析] GroupReduce,GroupCombine和Flink SQL group by 目录 [源码解析] GroupReduce,GroupCombine和Flink SQL grou ...

  7. Cookie 和 Session 关系详解

     什么是 Cookie 和 Session ? 什么是 Cookie HTTP Cookie(也叫 Web Cookie或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在 ...

  8. c++ UDP套接字服务器端代码示范

    c++ UDP套接字服务器端代码示范 #include<winsock2.h> //包含头文件 #include<stdio.h> #include<windows.h& ...

  9. 在群晖NAS上运行URLOS之后竟然能安装Discuz! Q!!

    如果我们手头上有1台群晖NAS时,有没有考虑过把群晖NAS当成服务器来使用,这样会不会很有意思呢? 现在,我们终于可以尝试一番了,把群晖NAS变成一台实实在在的服务器,在上面跑各种运行环境!其实很简单 ...

  10. linux环境下搭建Jenkins持续集成(Jenkins+git+shell+maven+tomact)

    准备环境 jenkins.war包 ,jdk1.8  ,tomact , maven,git 1.Jenkins  war包,下载地址https://jenkins.io/zh/download/  ...