python第二十六课——装饰器
装饰器是闭包的一种使用场景; python中的装饰器在定义上需要传入一个函数对象, 在此函数执行之前或者之后都可以追加其它的操作, 这样做的好处是,在不改变源码(原本业务逻辑的)同时,进行功能的扩展; 它在python中一般被使用在,性能测试,插入日志,事务管理,权限校验... 它就好比是一个切面(可插拔的),也就是我们之后学习中会提到的叫面向切面编程(aop) 开放封闭原则: 开放: 在不改动源码(破坏原本业务逻辑)的同时扩展新的功能 封闭: 不允许随意去修改源代码 说明装饰器的好处:
部门A:维护和管理数据信息平台 信息平台:内部封装了一些核心的api和接口 装饰器:函数(fn) 部门B:
m1():
func1()
func2()
func3() 部门C:
func4()
func5()
func6()
import time
def outer(fn):
def inner():
print('功能开始前记录日志...')
start=time.time()
fn()
print('功能介绍了记录日志...')
end=time.time()
print(end-start)
return inner @outer
def test():
print('我是test函数...')
test()
演示函数装饰器的几种常见的定义格式: 无参数无返回值的装饰器
def outer(fn):
def inner():
print('功能开始前记录日志...')
fn()
print('功能介绍了记录日志...')
return inner @outer
def test():
print('我是test函数...')
test()
无参有返回值的装饰器
def make_bold(fn):
def wrapper():
return '<b>' +fn()+'</b>'
return wrapper def make_italic(fn):
def wrapper():
return '<i>' +fn()+'</i>'
return wrapper @make_bold
@make_italic
def test():
return 'hello zsq'
print(test())
有参有返回值的装饰器
def zhuangshiqi(fn):
def wrapper(name,age,sex):
print(name,age)
fn(name,age,sex)
print(sex)
return 'abcdefg'
return wrapper @zhuangshiqi
def test(n,a,s):
print('我叫: %s,年龄为:%s,性别是:%s' %(n,a,s)) res=test(name='hank',age='',sex='男')
print(res)
通用装饰器
def zsq(fn):
def wrapper(*args,**kwargs):
# print(args)
fn(*args,**kwargs)
# print(kwargs)
# return '装饰器不难学'
return wrapper @zsq
def test(name,age,hobby):
print('我叫:%s,年龄为: %s,爱好是: %s' %(name,age,hobby)) print(test(age='',name='班长',hobby={'游戏':'魔兽','女性':'御姐','体育':'篮球'}))
python第二十六课——装饰器的更多相关文章
- NeHe OpenGL教程 第二十六课:反射
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- 初学 Python(十五)——装饰器
初学 Python(十五)--装饰器 初学 Python,主要整理一些学习到的知识点,这次是生成器. #-*- coding:utf-8 -*- import functools def curren ...
- python第二十九课——文件读写(复制文件)
自定义函数:实现文件复制操作有形参(2个) 没有返回值相似版(不用) def copyFile(src,dest): #1.打开两个文件:1个关联读操作,1个关联写操作 fr=open(src,'rb ...
- python第二十九课——文件读写(读取读取中文字符)
演示:读取中文字符 结论: 1).如果不设置encoding,默认使用gbk进行编解码 2).如果编码和解码不一致,最终导致报错,但是一旦设置了errors='ingore',那么就不会报错,而采取乱 ...
- Python学习第十一课——装饰器
#装饰器:本质就是函数,为其他函数附加功能原则:1.不修改被修饰函数的源代码2.不修改被修饰函数的调用方式 装饰器=高阶函数+函数嵌套+闭包 #高阶函数 ''' 高阶函数定义: 1.函数接受的参数是一 ...
- Python学习第二十六课——PyMySql(python 链接数据库)
Python 链接数据库: 需要先安装pymysql 包 可以设置中安装,也可以pip install pymysql 安装 加载驱动: import pymysql # 需要先安装pymysql 包 ...
- python五十六课——正则表达式(常用函数之match)
函数:match(regex,string,[flags=0])参数:regex:就是正则表达式(定义了一套验证规则)string:需要被验证的字符串数据flags:模式/标志位,默认情况下(不定义) ...
- 第二十六课 典型问题分析(Bugfix)
问题1: glibc中的strdup实现如下: 没有对参数s进行空指针判断. 我们的Exception.cpp中应做改进: 在第12行进行判断空指针操作. 问题2: t1在析构时会抛出异常,我们在re ...
- Spring入门第二十六课
Spring中的事务管理 事务简介 事务管理是企业级应用程序开发中必不可少的技术,用来确保数据的完整性和一致性. 事务就是一系列的动作,他们被当做一个单独的工作单元,这些动作要么全部完成,要么全部不起 ...
随机推荐
- 自动加载的iframe高度自适应
动态产生iframe,自动加载至body中,还有一个功能就是iframe的高度自适应,下面代码测试于IE和Firefox,Chrome:
- 【Tomcat】tomcat配置文件详解
Tomcat Server的结构图 结构框架,如下 属性表格 元素名 属性 解释 server(它代表整个容器,是Tomcat实例的顶层元素.由org.apache.catalina.Server接口 ...
- python与中文的那点事
目录 python与中文的那点事 1. utf-8/gbk/unicode/ASCII 2.各种编码之间的转换 3. 统计字符串中数字,字母,汉字的个数 python与中文的那点事 在学习python ...
- 理解JVM之Java内存区域
Java虚拟机运行时数据区分为以下几个部分: 方法区.虚拟机栈.本地方法栈.堆.程序计数器.如下图所示: 一.程序计数器 程序计数器可看作当前线程所执行的字节码行号指示器,字节码解释器工作时就是通过改 ...
- php pdo对象使用详解: 连接数据库与exec方法
要使用pdo,首先需要开启pdo扩展,我这里已经开启了mysql的pdo扩展 ghostwu@dev:~$ php -m | grep pdo pdo_mysql ghostwu@dev:~$ 1,连 ...
- HDU3081(KB11-N 二分答案+最大流)
Marriage Match II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- POJ3090(SummerTrainingDay04-M 欧拉函数)
Visible Lattice Points Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7450 Accepted: ...
- jQuery通用的全局遍历方法$.each()用法实例
1.jQuery通用的全局遍历方法$.each()用法 2. test.json文件代码: 3. html代码 4.jQuery代码 <script src="jquery-1.3.1 ...
- python中matplotlib.pyplot中cm的属性
https://matplotlib.org/gallery/color/colormap_reference.html
- BZOJ1802: [Ahoi2009]checker(性质分析 dp)
题意 题目链接 Sol 一个不太容易发现但是又很显然的性质: 如果有两个相邻的红格子,那么第一问答案为0, 第二问可以推 否则第一问答案为偶数格子上的白格子数,第二问答案为偶数格子上的红格子数 #in ...