python装饰器的理解
学习python,发现装饰器是一个比较难理解的地方。
下面用代码来说明。
装饰器的作用是为了切面编程(AOP)。这种编程在java上有很多实现方式。下面直接说明吧:
1.作为装饰器的函数至少有两个def。并且最外层的def有且仅有一个参数,也就是像下面的这样:
def decorateDemo(fun):
def real_deco():
######
######
return real_deco
说明一下上面的装饰器的意义,第一个def是为了包括返回的函数对象,所以也就是倒数第二个def必须有一个参数。这个参数就是被装饰的函数,如果没有这个参数,装饰器将没有办法使用。
第二个def是真正的包括函数,这个函数的参数是被于被包裹函数的参数一致的,所以,为了包括函数的通用性,一般都写成 real_deco(*args,**argss),用来接收任意的参数。
第三个需要注意的地方是return real_deco,这个地方一定注意是返回real_deco,而不是real_deco().返回的函数引用,而不是函数调用。
改进的代码如下:
def decorateDemo(fun):
def real_deco(*args,**argss):
######
######
return real_deco
调用示例:
def decorateDemo(fun):
def real_deco(*args,**argss):
print " i am in decorate@@@"
fun(args,argss)
return real_deco
@decorateDemo
def funtest(args)
print "i have one args"+args
if __name__== '__main__':
funtest("lxzhtest")
第二个需要注意的地方是如果装饰器也带参数应该怎么办。
这个时候需要将装饰器函数提高一个级别,类似于下面这样:
def decorateDemoHigher(decoArgs):
def decorateDemo(fun):
def real_deco():
######
######
return real_deco
return decorateDemo
更加高级的例子,参考: http://m.blog.csdn.net/blog/dreamcoding_11109/8611578#
python装饰器的理解的更多相关文章
- 转发对python装饰器的理解
[Python] 对 Python 装饰器的理解的一些心得分享出来给大家参考 原文 http://blog.csdn.net/sxw3718401/article/details/3951958 ...
- python 装饰器的理解以及类装饰器
python装饰器的作用就是在不改变原有函数结构的情况下给该函数增加一个新功能,就是不入侵到原来函数里面修改代码给其增加一个新功能 先看代码 def out(fn): def inner(*args, ...
- python 装饰器 (个人理解就是前置的内建函数)
感谢有篇文件详细介绍[简单 12 步理解 Python 装饰器]http://python.jobbole.com/85056/ 1.首先介绍内建函数 2.转换为装饰器 3.执行顺序 4.装饰器实用
- 总结了11条,我对Python 装饰器的理解
对于每一个学习 Python 的同学,想必对 @ 符号一定不陌生了,正如你所知, @ 符号是装饰器的语法糖,@符号后面的函数就是我们本文的主角:装饰器. 装饰器放在一个函数开始定义的地方,它就像一顶帽 ...
- python 装饰器的理解
一. 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷 ...
- 谈谈对Python装饰器的理解
装饰器,又名函数修饰符.笔者觉得函数修饰符,这个名字更能直观的反应他的作用. 函数修饰符语法特征 : @ + 修饰符 函数修饰符的装饰对象: 函数修饰符,就是说他修饰的是 ...
- Python装饰器的通俗理解
转载:http://blog.csdn.net/u013471155 在学习Python的过程中,我相信有很多人和我一样,对Python的装饰器一直觉得很困惑,我也是困惑了好久,并通过思考和查阅才能略 ...
- (一)Python装饰器的通俗理解
在学习Python的过程中,我相信有很多人和我一样,对Python的装饰器一直觉得很困惑,我也是困惑了好久,并通过思考和查阅才能略有领悟,我希望以下的内容会对你有帮助,我也努力通过通俗的方式使得对Py ...
- Python 装饰器学习
Python装饰器学习(九步入门) 这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 1 2 3 4 5 6 7 8 # -*- c ...
随机推荐
- Android中的MVC,MVP和MVVM
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha MVC,MVP,MVVM的区别 #MVC 软件可以分为三部分 视图(View):用户界面 ...
- Maven / Nexus 的用法和经验
Maven / Nexus 的用法和经验
- python3 开发面试题(去重保持原来的顺序)6.2
""" l1 = [11, 2, 3, 22, 2, 4, 11, 3] 去重并保持原来的顺序 """ #方式一 for 循环方法 l1 = ...
- 使用jQuery操作dom(追加和删除样式-鼠标移入移出)练习
1.实现鼠标移入则添加背景色,鼠标移出则删除背景色 <!DOCTYPE html> <html> <head> <title>test1.html< ...
- ubuntu使用ssh远程登录服务器及上传本地文件到服务器
1. ubuntu 远程登录 首先你的ubuntu要能够支持ssh,如果不能,自行百度! 打开终端,输入 ssh root@115.159.200.13(你的服务器的IP地址) 回车就会让你输入 ...
- Android Studio 生成aar包,并非debug包,而是release包
1.编写Module,作为library 下面是需要发布的aar包,上面的是随意的project 2.app依赖myLibrary 2.1 设置Project Structure 2.2 app依赖M ...
- python3中的range函数
奇怪的现象 在paython3中 print(range(10)) 得出的结果是 range(0,10) ,而不是[0,1,2,3,4,5,6,7,8,9] ,为什么呢? 官网原话: In many ...
- Linux下的/etc/crontab文件和crontab -e命令区别及Crontab命令详解(转)
/etc/crontab文件和crontab -e命令区别 1.格式不同 前者 # For details see crontabs # Example of job definition: # .- ...
- Linux下Shell脚本替换换行符(转)
说明:过滤换行符确实有点吭,不是那么好弄.处理文本时需要将换行符替换为空格,若使用sed命令会比较麻烦,而使用tr命令非常方便. 输入文本(country.txt) China America Fra ...
- Android Service完全解析,关于服务你所需知道的一切
来自:http://www.360doc.com/content/14/0415/18/2793098_369238276.shtml 相信大多数朋友对Service这个名词都不会陌生,没错,一个老练 ...