装饰器概念&实际使用干货
- 本质是函数(装饰其他函数),是为其他函数添加附加功能
- 不能修改被装饰函数的源代码
- 不能修改被装饰函数的调用方式
- 函数及“变量”
- 高阶函数
- 把一个函数名当做实参传给另外一个函数(不修改被装饰函数,为其添加功能)
- 返回值中包含函数名(不修改函数调用方式)用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& ...
随机推荐
- [TJOI2007]小朋友
题面 Luogu Sol 弦图最大独立集 做法见上篇博客 # include <bits/stdc++.h> # define RG register # define IL inline ...
- 【Machine Learning】决策树之ID3算法 (2)
决策树之ID3算法 Content 1.ID3概念 2.信息熵 3.信息增益 Information Gain 4. ID3 bias 5. Python算法实现(待定) 一.ID3概念 ID3算法最 ...
- C++ 11: function & bind 使用示例
#include <functional> #include <iostream> struct Foo { Foo(int num) : num_(num) {} void ...
- Fastdfs 部署干货
tracker server and client:192.168.1.42 storage server:192.168.1.46 storage server:192.168.1.53 安装: 安 ...
- jenkins start
author:alex.wang date:2017.05.25 system:centos7.2 ip:192.168.1.46 download: wget http://mirrors.jenk ...
- Oracle 内存使用建议性能视图
下面三个查询结果均可查询出随着内存参数设置的变化性能的变化情况,对oracle数据库内存的设置有一定的建议和指导作用. select t.SGA_SIZE,t.ESTD_DB_TIME_FACTOR ...
- 使用Jmeter进行接口测试和压力测试的配置和使用
1. Jmeter简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域. JMeter 可 ...
- easyui学习笔记7—在手风琴中显示表格
在这一篇中我们看看如何在手风琴里面显示表格数据的. 1.先看看引用的资源 <link rel="stylesheet" type="text/css" h ...
- Hive入门操作
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能.本文描述了HIve的一些基本操作,如有错误之处还请指出. 常用语法 #显示相关信息 sh ...
- 分布式链路跟踪系统架构SkyWalking和zipkin和pinpoint
Net和Java基于zipkin的全链路追踪 https://www.cnblogs.com/zhangs1986/p/8966051.html 在各大厂分布式链路跟踪系统架构对比 中已经介绍了几大框 ...