装饰器概念&实际使用干货
- 本质是函数(装饰其他函数),是为其他函数添加附加功能
- 不能修改被装饰函数的源代码
- 不能修改被装饰函数的调用方式
- 函数及“变量”
- 高阶函数
- 把一个函数名当做实参传给另外一个函数(不修改被装饰函数,为其添加功能)
- 返回值中包含函数名(不修改函数调用方式)用return返回内存地址
- 嵌套函数
装饰器 = 高阶函数 + 嵌套函数
实际使用方式:
#装饰器试验 import time #装饰器
def adron(fun):
print('传入待装饰函数的内存地址:%s'%fun)
def ad_x(*args,**kwargs):
start_time = time.time()
#fun+()的方式来执行被装饰函数
fun(*args,**kwargs)
stop_time = time.time()
print('visit world use time:%s'%(stop_time-start_time))
return ad_x #被装饰函数
@adron # @adron = adron(tet),将tet内存地址传当做参数传入装饰器函数
def tet():
time.sleep(3)
print('hello world!')
#这里tet由装饰器装饰后,内存地址是ad_x的内存地址
tet() @adron
def jsq(n,s):
for i in range(n):
time.sleep(s)
print(i) jsq(5,0.1)
高阶装饰器:
#大装饰器 name = 'sober'
password = '' def badn(action):
print("登录方式:%s"%action)
#fun 由 @badn装饰器传入
def bt_badn(fun):
print('查看fun值:%s'%fun)
def adron(*args,**kwargs):
if action == 'local':
name_value = input('Please user name:')
password_value = input('Please Password:')
if name == name_value and password == password_value:
#fun 会执行被装饰函数,因为传入的fun是被执行函数的内存地址
ret_value = fun(*args,**kwargs)
print('装饰器内执行被装饰函数后返回前')
#返回被装饰函数执行后的结果
return ret_value
else:
print('username or password error')
elif action == 'ldap':
print('ldap is unrealized')
#return返回函数名称,是在返回函数内存地址,使用内存地址+()的方式调用函数
return adron
return bt_badn def index():
print('welcome !hello world!') @badn(action='local') # @badn = badn(home) 如果要传入参数则需要在装饰器函数内再嵌套一层
def home():
print('welcome home path')
return 'a' @badn(action='ldap')
def ldap():
print('welcome ldap enter') index()
#这里的执行通过函数内存地址+()执行函数
#home()
print('显示home返回值:%s'%home())
ldap()
注:学习oldboy python自动化运维——装饰器篇笔记
代码内加入了本人对装饰使用的理解
装饰器概念&实际使用干货的更多相关文章
- 洗礼灵魂,修炼python(29)--装饰器(1)—>利用经典案例解析装饰器概念
前提必备 不急着进入正题,在前面函数作用域那一章介绍了闭包,全局变量局部变量,这里再看几个简单的闭包案例: 1):不带参数 注意: 1.这里的name属性是每个函数都有的,可以反馈函数名 2.temp ...
- python装饰器概念与应用
格式一:装饰器外层不传参,内层传参 user_status = False # 用户登录了就把这个改成True def login(func): # 把要执行的henan模块从这里传进来 def in ...
- python学习Day13 函数的嵌套定义、global、nonlocal关键字、闭包及闭包的运用场景、装饰器
复习 1.函数对象:函数名 => 存放的是函数的内存地址1)函数名 - 找到的是函数的内存地址2)函数名() - 调用函数 => 函数的返回值 eg:fn()() => fn的返回值 ...
- python 闭包和装饰器
python 闭包和装饰器 一.闭包闭包:外部函数FunOut()里面包含一个内部函数FunIn(),并且外部函数返回内部函数的对象FunIn,内部函数存在对外部函数的变量的引用.那么这个内部函数Fu ...
- Python学习笔记012——装饰器
1 装饰器 1.1装饰器定义 在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator). 1.2 装饰器分类 装饰器:函数装饰器,类装饰器,函数的装饰器,类的装饰器 装饰器:函数装饰函 ...
- Python学习之路day4-函数高级特性、装饰器
一.预备知识 学习装饰器需理解以下预备知识: 函数即变量 函数本质上也是一种变量,函数名即变量名,函数体就变量对应的值:函数体可以作为值赋给其他变量(函数),也可以通过函数名来直接调用函数.调用符号即 ...
- Python(十) 函数式编程: 匿名函数、高阶函数、装饰器
一.lambda表达式 lambda parameter_list: expression # 匿名函数 def add(x,y): return x+y print(add(1,2)) f = la ...
- python基础-闭包函数和装饰器
闭包函数和装饰器 闭包函数 概念:在函数中(嵌套)定义另一个函数时,内部函数引用了外层函数的名字. 特性 闭包函数必须在函数内部定义 闭包函数可引用外层函数的名字 闭包函数是函数嵌套.函数对象.名称空 ...
- 装饰器&偏函数与作用域与异常处理与文件读写
装饰器 概念:是一个闭包,把一个函数当做参数返回一个替代版的函数,本质上就是一个返回函数的函数 简单的装饰器 def func1(): print("sunck is a good man& ...
随机推荐
- 表单校验常用原生js库
1.字符串去除左右空格继承形式// 除去左右空格String.prototype.Trim = function() { return this.replace(/(^\s*)|(\s*$)/g, & ...
- 02_dubbo的SPI
[dubbo为什么不采用JDK自带的SPI] 1.JDK自带的SPI(ServiceLoader)会一次性实例化扩展点所有实现,基本只能通过遍历全部获取,也就是接口的实现类全部加载并实例化一遍,如果我 ...
- _itoa atoi、atof、itoa、itow _itoa_s 类型转换使用说明
原文:http://www.cnblogs.com/lidabo/archive/2012/07/10/2584706.html _itoa 功能:把一整数转换为字符串 用法:char * _itoa ...
- VS2013 C++ 动态链接库的生成
原文:http://www.cnblogs.com/djiankuo/p/5092025.html 这个东西搞了好几天,现在终于没有问题了,其实现在想来还是微软做的东西好用啊,在这里点个赞!!! LL ...
- 二十、滑动开关css
如上图所示的图片,如何通过css实现呢? 下面咱们慢慢尝试: html: <div class="togglePosition"> <label class=&q ...
- qt 使用qtxlsx 读写excel
https://github.com/dbzhang800/QtXlsxWriter 下载qtxlsx地址 QtXlsx is a library that can read and write Ex ...
- python 多进程数据交互及共享
多线程和多进程最大的不同在于,多进程中,同一个变量,各自有一份拷贝存在于每个进程中,互不影响,而多线程中,所有变量都由所有线程共享,所以,任何一个变量都可以被任何一个线程修改,因此,线程之间共享数据最 ...
- P4python: python interface to Perforce API
P4python is the python interface to Perforce API, it helps to do Perforce operations through python. ...
- 快速安装测试版Mysql
本文操作系统: CentOS 7.2.1511 x86_64MySQL 版本: 5.7.13 1.卸载系统自带的 mariadb-lib [root@centos-linux ~]# rpm -qa| ...
- sql server——子查询
简述: 在查询语句中包含着有另外一条查询语句,被包含的查询语句称为子查询,包含着子查询的查询就称为父查询. 总之,子查询就是在查询语句里嵌套一条或者多条查询语句. 常用子查询分类: 一.独立子查询 特 ...