装饰器

"""
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. 一文说通Dotnet Core的后台任务

    这是一文说通系列的第二篇,里面有些内容会用到第一篇中间件的部分概念.如果需要,可以参看第一篇:一文说通Dotnet Core的中间件   一.前言 后台任务在一些特殊的应用场合,有相当的需求. 比方, ...

  2. OSI模型各层详解

    1. OSI概述 1.1 模拟器说明 1.1.1 模拟器的作用 搭建实验环境进行测试. 1.1.2 模拟器的类型 PT:一般是学校中使用,命令不完整,且不能抓包 GNS3:思科(CCNA,CCNP), ...

  3. 【Vulnhub】FristiLeaks v1.3

    靶机信息 下载连接 https://download.vulnhub.com/fristileaks/FristiLeaks_1.3.ova.torrent https://download.vuln ...

  4. yaml读取封装

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ 对yaml格式的配置文件的操作 """ ...

  5. 【K8S】Service服务详解,看这一篇就够了!!

    k8s用命名空间namespace把资源进行隔离,默认情况下,相同的命名空间里的服务可以相互通讯,反之进行隔离. 1.1 Service Kubernetes中一个应用服务会有一个或多个实例(Pod, ...

  6. 深入理解JVM(③)ZGC收集器

    前言 ZGC是一款在JDK11中新加入的具有实验性质的低延迟垃圾收集器,目前仅支持Linux/x86-64.ZGC收集器是一款基于Region内存布局的,(暂时)不设分代的,使用了读屏障.染色指针和内 ...

  7. Redis安装过程jemalloc/jemalloc.h报错

    问题: [root@localhost redis-3.0.0]# make cd src && make all make[1]: Entering directory `/data ...

  8. laravel Excel 导入

    <?php namespace App\Modules\Live\Http\Controllers; use Illuminate\Http\Request; use Maatwebsite\E ...

  9. Python 简明教程 --- 14,Python 数据结构进阶

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 如果你发现特殊情况太多,那很可能是用错算法了. -- Carig Zerouni 目录 前几节我们介 ...

  10. python fabric安装

    1 安装epel wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo 2 安装pip yum i ...