博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python学习笔记--装饰器
阅读量:5220 次
发布时间:2019-06-14

本文共 1305 字,大约阅读时间需要 4 分钟。

1.首先是一个很无聊的函数,实现了两个数的加法运算:

def f(x,y):    print x+yf(2,3)

输出结果也ok

5

2.可是这时候我们感觉输出结果太单一了点,想让代码的输出多一点看起来不这么单调:

def showInfo(fun):    def wrap(x,y):        print "The function before"        func(x,y)        print "The function after"    return wrapdef f(x,y):    print x+yf = showInfo(f)f(2,3)

此时的输出:

The function before5The 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 wrapdef f1(x,y):    print x*yf1 = showInfo(f1)f1(2,3)
The function before6The 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 before5The function afterThe function before6The function after

总结:这正是python装饰器意义所在的地方。python中的可调用对象包括函数 方法 实现了__call__方法的类。python中的函数也是对象,可以作为高阶函数的参数传入或返回值返回。因此我们可以用高阶函数对某个函数进行封装,这就是python中的装饰器。他的语法结构类似这样:

@decoratordef func(func):    pass

 

转载于:https://www.cnblogs.com/dayxiaobei/p/5357139.html

你可能感兴趣的文章
javaScript数组去重方法汇总
查看>>
评价意见整合
查看>>
MySQL表的四种分区类型
查看>>
C++变量的“总分性”(Mereology)
查看>>
应用软件学习心得之mapgis功能学习
查看>>
二、create-react-app自定义配置
查看>>
Android PullToRefreshExpandableListView的点击事件
查看>>
Python学习(一)
查看>>
关于Matchvs一些使用心得与建议
查看>>
Gson获取json串中的key-value
查看>>
创建spring boot项目
查看>>
Behave + Selenium(Python) 四
查看>>
系统的横向结构(AOP)
查看>>
linux常用命令
查看>>
有序链表的归并 分类: 链表 2015-06-...
查看>>
A Plug for UNIX 分类: POJ ...
查看>>
寒假作业01
查看>>
Linux常用命令
查看>>
正确适配苹果ATS审核要求的姿势
查看>>
NHibernate.3.0.Cookbook第四章第6节的翻译
查看>>