python学习笔记--装饰器
1.首先是一个很无聊的函数,实现了两个数的加法运算:
def f(x,y):
print x+y
f(2,3)
输出结果也ok
5
2.可是这时候我们感觉输出结果太单一了点,想让代码的输出多一点看起来不这么单调:
def showInfo(fun):
def wrap(x,y):
print "The function before"
func(x,y)
print "The function after"
return wrap def f(x,y):
print x+y f = showInfo(f)
f(2,3)
此时的输出:
The function before
5
The function after
3.此时我们又定义了一个f1()函数也希望它和f()函数有一样的输出格式,只要在f1()执行之前调用一次showInfo()函数:
def showInfo(fun):
def wrap(x,y):
print "The function before"
func(x,y)
print "The function after"
return wrap def f1(x,y):
print x*y f1 = showInfo(f1)
f1(2,3)
The function before
6
The function after
4.此时我知道你应该大概解到了函数修饰的作用了,可是你会发现我们本义是想调用f()函数的,可是在调用的过程中使用了两次调用才得到了我们想要的效果。所以我们使用python提供的装饰器方法来修改我们的代码:
def showInfo(func):
def wrap(x,y):
print "The function before"
func(x,y)
print "The function after"
return wrap @showInfo
def f(x,y):
print x+y @showInfo
def f1(x,y):
print x*y f(2,3)
f1(2,3)
这次的结果如下,我们只需直接调用我们要用的函数就得到了我们想要的结果了:
The function before
5
The function after
The function before
6
The function after
总结:这正是python装饰器意义所在的地方。python中的可调用对象包括函数 方法 实现了__call__方法的类。python中的函数也是对象,可以作为高阶函数的参数传入或返回值返回。因此我们可以用高阶函数对某个函数进行封装,这就是python中的装饰器。他的语法结构类似这样:
@decorator
def func(func):
pass
python学习笔记--装饰器的更多相关文章
- Python学习笔记--装饰器的实验
装饰器既然可以增加原来函数的功能,那能不能改变传给原函数的参数呢? 我们实验一下,先上代码: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date ...
- Python学习笔记: 装饰器Decorator
介绍 装饰器是对功能函数的加强. 在原来的功能函数之外,另外定义一个装饰器函数,对原来的功能函数进行封装(wrapper)并在wrapper的过程中增加一些辅助功能. 应用场景 如下场景: 业务函数f ...
- python 学习分享-装饰器篇
本篇内容为偷窃的~哈哈,借用一下,我就是放在自己这里好看. 引用地址:http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html 第一步: ...
- python学习之装饰器-
python的装饰器 2018-02-26 在了解python的装饰器之前我们得了解python的高阶函数 python的高阶函数我们能返回一个函数名并且能将函数名作为参数传递 def outer() ...
- python学习day14 装饰器(二)&模块
装饰器(二)&模块 #普通装饰器基本格式 def wrapper(func): def inner(): pass return func() return inner def func(): ...
- Python学习 :装饰器
装饰器(函数) 装饰器作为一个函数,可以为其他函数在不修改原函数代码的前提下添加新的功能 装饰器的返回值是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权限校验等 ...
- python学习之-- 装饰器
高阶函数+嵌套函数 == 装饰器 什么是装饰器: 其实也是一个函数. 功能:为其他的函数添加附加功能 原则:不能修改被装饰的函数的源代码和调用方式 学习装饰器前首先要明白以下3条事项: 1:函数 即 ...
- 6月4日 python学习总结 装饰器复习
1. 装饰器的原理以及为什么要使用装饰器 在代码运行期间动态增加功能的方式,称之为"装饰器"(Decorator). 在不影响原代码结构的情况下为其添加功能 2. 装饰器的基本 ...
- 学习笔记——装饰器模式Decorator
装饰器模式,最典型的例子. 工厂新开了流水线,生产了手机外壳,蓝天白云花色.刚准备出厂,客户说还要印奶牛在上面,WTF…… 时间上来不及,成本也不允许销毁了重来,怎么办?弄来一机器A,专门在蓝天白云的 ...
随机推荐
- 《Python》 代码块、小数据池和编码转换
一.代码块 Python程序是由代码块构造的.块是一个python程序的文本,他是作为一个单元执行的. 什么是代码块:一个py文件,一个函数,一个文件,一个类都是一个代码块. 作为交互方式输入的每一行 ...
- KMP 详解图
- 关于while(cin>>c)语句的理解
1.while(cin>>c)条件语句,其功能是检测输入流中的输入是否有效,若是文件结束标记或者非法输入,则条件判断为假,否则为真. 2.windows下的文件结束标记是Ctrl+z,Li ...
- L1-036 A乘以B
看我没骗你吧 —— 这是一道你可以在 10 秒内完成的题:给定两个绝对值不超过 100 的整数 A 和 B,输出 A 乘以 B 的值. 输入格式: 输入在第一行给出两个整数 A 和 B(−100≤A, ...
- 集成学习之Boosting —— XGBoost
集成学习之Boosting -- AdaBoost 集成学习之Boosting -- Gradient Boosting 集成学习之Boosting -- XGBoost Gradient Boost ...
- 利用 gulp 来合并seajs 的项目
gulp-seajs-transport 和 gulp-seajs-concat这两个gulp插件 gulp-seajs-transpor 这个插件这样是给每个js模块 标示 模块名称 gulp-se ...
- IOS消息推送(转)
第一部分 首先第一步当然是介绍一下苹果的推送机制(APNS)咯(ps:其实每一篇教程都有),先来看一张苹果官方对其推送做出解释的概要图. Provider是给你手机应用发出推送消息的服务器,而APNS ...
- screen 命令 http://man.linuxde.net/screen
http://man.linuxde.net/screen -A 将所有的视窗都调整为目前终端机的大小. -d <作业名称> 将指定的screen作业离线. -h <行数> 指 ...
- Python bool值
a = 10 print(type(a)) #<class 'int'> d = str(a) #把数字转换成str print(type(d)) #<class 'str'> ...
- python3:jsonpath-rw处理Json对象
前提:接口自动化测试中,存在依赖情况:test_02的某个请求参数的值,需要依赖test_01返回结果中某个字段的数据,所以就先需要拿到返回数据中特定字段的值.这里使用到python中jsonpath ...