装饰器_python
一、装饰器中提及的知识点
装饰器主要作用:在原函数基础上添加新功能
1、作用域:LEGB
2、高阶函数
3、闭包(在一个内部函数中,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就认为是闭包)
闭包只是用于解释现象
#闭包例子:
def outer():
x=10
def inner(): #inner是一个内部函数
print(x) #引用外部变量
return inner #结论:内部函数inner就是一个闭包
outer()()
装饰器函数例子1:给函数添加计算执行时间的功能
import time
def show_time(fun): #需添加功能函数(这里是添加打印执行时间)
def inner():
start=time.time()
time.sleep(2)
fun()
stop=time.time()
print(stop-start)
return inner
def foo(): #原函数
print('f0000')
foo=show_time(foo) #重新指定函数加入新功能,并沿用原函数名
foo()
也可以使用新的调用方法:在原函数前面添加@show_time
import time
def show_time(fun): #需添加功能函数(这里是添加打印执行时间)
def inner():
start=time.time()
time.sleep(2)
fun()
stop=time.time()
print(stop-start)
return inner @show_time #装饰器添加show_time部分功能,这是规定写法,省略后面的foo=show_time(foo)
def foo(): #原函数
print('f0000')
foo()
例子2:继续优化为不定项的装饰器
import time
def show_time(fun): #需添加功能函数(这里是添加打印执行时间)
def inner(*args,**kwargs):
start=time.time()
time.sleep(2)
fun(*args,**kwargs)
stop=time.time()
print(stop-start)
return inner @show_time #装饰器添加show_time部分功能,这是规定写法,省略后面的foo=show_time(foo)
def foo(n): #原函数
print(n*n)
foo(3) 装饰器用途:如检验有无登录
装饰器_python的更多相关文章
- Python高手之路【四】python函数装饰器
def outer(func): def inner(): print('hello') print('hello') print('hello') r = func() print('end') p ...
- python装饰器
今天看了装饰器的一些内容,感觉@修饰符还是挺抽象的. 装饰器就是在不用改变函数实现的情况下,附加的实现一些功能,比如打印日志信息等.需要主意的是装饰器本质是一个高阶函数,她可以返回一个函数. 装饰器需 ...
- Python(四)装饰器、迭代器&生成器、re正则表达式、字符串格式化
本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解 ...
- [原创]django+ldap实现单点登录(装饰器和缓存)
前言 参考本系列之前的文章,我们已经搭建了ldap并且可以通过django来操作ldap了,剩下的就是下游系统的接入了,现在的应用场景,我是分了2个层次,第一层次是统一认证,保证各个系统通过ldap来 ...
- PHP 装饰器模式
装饰器模式:是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能. [装饰器模式中主要角色] 抽象组件角色(Component):定义一个对象接口,以规范准备接受附加责任的对象,即可以给这 ...
- python cookbook 学习系列(一) python中的装饰器
简介 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓 ...
- python基础补漏-05-生成器和装饰器
[1]生成器 很难用简单的语言描述生成器. 生成器:从字面上来理解,就是以某种规则为基础,不断的生成数据的工具 生成器函数: 在函数中如果出现了yield关键字,那么该函数就不再是普通函数,而是生成器 ...
- python --> 递归 以及装饰器
一.递归知识 函数迭套执行,逐层执行之后,满足某个条件之后就会停止执行,将return值返回上层的函数,上层函数再逐层返回,最终返回给最初始函数. 递归在斐波那契数列的应用[斐波那契数列特点:前两个数 ...
- python 装饰器的理解
一. 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷 ...
随机推荐
- 服务器控件Repeater
在使用aspx开发中,如果一个页面做纯数据展示,Repeater会比GridView更适合,因为它是轻量级的 下面是最基本的用法: aspx: <table> <asp:Repea ...
- gitlab被屏蔽问题
There was an error with the reCAPTCHA. Please solve the reCAPTCHA again. 解决办法 俗话说:哪里有碍事的墙,哪里就使劲推好了 h ...
- Q&A in 2018 - Q2
How to zip a file for Windows? 压缩一个文件: makecab c:/file_name.txt c:/file_name.zip 解压一个文件: expand c:/f ...
- ggEditor流程图增加网格背景
参考官方文档: https://www.yuque.com/antv/g6/plugin.tool.grid react-ggEditor如何使用 import { Flow } from 'gg-e ...
- Linux /etc/network/interfaces
Linux下/etc/network/interfaces文件用来配置网络接口. 1. 使用动态IP地址 auto eth0 iface eth0 inet dhcp 2. 使用静态IP地址 auto ...
- 分布式任务调度XXL-JOB初体验
简介 XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速.学习简单.轻量级.易扩展.现已开放源代码并接入多家公司线上产品线,开箱即用. 官方文档很完善,不多赘述.本文主要是搭建XX ...
- beego的请求数据处理
我们经常需要获取用户传递的数据,包括 Get.POST 等方式的请求,beego 里面会自动解析这些数据,你可以通过如下方式获取数据: GetString(key string) string Get ...
- Linux分区类型EXT2、EXT3、EXT4详解
一.EXT2与EXT3 Linux之前缺省情况下使用的文件系统为Ext2,ext2文件系统的确高效稳定.但是,随着Linux系统在关键业务中的应用,Linux文件系统的弱点也渐渐显露出来了:其中系统缺 ...
- Android_下方弹出菜单的实现
这一功能要用到动画相关知识 实现点击按钮弹出下方输入框,这里点击可弹出一个输入界面,其中包括一个小型计算器. 点击date可弹出datedialog设置date. 1.编写弹出框的布局文件 <? ...
- ubuntu 部署Django项目+uwsgi+Nginx
1.部署框架 Nginx负责静态资源请求,并且把无法处理的请求转发至uwsgi处理 2.安装并配置Nginx 2.1安装 apt-get install nginx (如果安装失败请先升级apt-ge ...