最近看到有个装饰器的例子,没看懂,

#!/usr/bin/python
class decorator(object):
def __init__(self,f):
print "initial decorator"
f()
def __call__(self):
print "call decorator"
@decorator
def fun():
print "in the fun"
print "after "
fun()

从stackoverflow看到了浏览最多的关于python装饰器的文章,下面是这个文章的网址

http://stackoverflow.com/questions/739654/how-can-i-make-a-chain-of-function-decorators-in-python/1594484#1594484

感觉写的挺好的,我自己也总结总结。

问题是lz想写个装饰器:

@makebold
@makeitalic
def say():
return "Hello"

有这样的输出:

"<b><i>Hello</i></b>"

看到最短的回复是:

def makebold(f):
return lambda: "<b>" + f() + "</b>"
def makeitalic(f):
return lambda: "<i>" + f() + "</i>" @makebold
@makeitalic
def say():
return "Hello" print say()

太经典了,

最开始的例子,先写段代码:

#de 就代表decorator吧,简单些O(∩_∩)O~,
def de(f):
def wr():
print "before func"
f()
print "after func"
return wr def func():
print "this is func self"
#先运行一遍代码
func()
#装饰函数
de_func=de(func)
#运行装饰了之后的函数
de_func()
#或者
#装饰函数
func=de(func)
#运行装饰了之后的函数
func()
#或者
de(func)()

还有一处需要理解的就是类的__call__方法是在instance=classname()()(也可以写成instance=classname();instance())的时候调用的

python 自己的装饰器就是:

#还可以在函数定义之前加上@de
@de
def func1():
print "**this is func self"
func1()

理解了上面之后文章开头的例子也可以写成这样

class decorator(object):
def __init__(self,f):
print "initial decorator"
f()
def __call__(self):
print "call decorator"
# @decorator
def fun():
print "in the fun"
fun=decorator(fun)
print "after "
fun()

有仔细看了那篇文章,感觉受益匪浅,也是自己当初学的时候没好好听吧。

       

python 装饰器学习(decorator)的更多相关文章

  1. Python 装饰器学习

    Python装饰器学习(九步入门)   这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 1 2 3 4 5 6 7 8 # -*- c ...

  2. (转载)Python装饰器学习

    转载出处:http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html 这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方 ...

  3. Python装饰器学习

    Python装饰器学习(九步入门)   这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 ? 1 2 3 4 5 6 7 8 # -*- ...

  4. Python——装饰器(Decorator)

    1.什么是装饰器? 装饰器放在一个函数开始定义的地方,它就像一顶帽子一样戴在这个函数的头上.和这个函数绑定在一起.在我们调用这个函数的时候,第一件事并不是执行这个函数,而是将这个函数做为参数传入它头顶 ...

  5. Python装饰器(decorator)

    了解装饰器,要先了解闭包. 1,闭包(closure) 闭包是Python所支持的一种特性,它让在非global scope定义的函数可以引用其外围空间中的变量,这些外围空间中被引用的变量叫做这个函数 ...

  6. Python 装饰器学习心得

    最近打算重新开始记录自己的学习过程,于是就捡起被自己废弃了一年多的博客.这篇学习笔记主要是记录近来看的有关Python装饰器的东西. 0. 什么是装饰器? 本质上来说,装饰器其实就是一个特殊功能的函数 ...

  7. Python 装饰器(Decorator)

    装饰器的语法为 @dec_name ,置于函数定义之前.如: import atexit @atexit.register def goodbye(): print('Goodbye!') print ...

  8. Python 装饰器学习以及实际使用场景实践

    前言 前几天在看Flask框架,对于非常神奇的@语法,不是非常的理解,回来补装饰器的功课.阅读很多的关于装饰器的文章,自己整理一下,适合自己的思路的方法和例子,与大家分享. app = Flask(_ ...

  9. Python装饰器学习(九步入门)

    这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 ? 1 2 3 4 5 6 7 8 # -*- coding:gbk -*- '''示 ...

随机推荐

  1. spring整合struts2

    1. Spring 如何在 WEB 应用中使用 ? 1). 需要额外加入的 jar 包: spring-web-4.0.0.RELEASE.jarspring-webmvc-4.0.0.RELEASE ...

  2. C# 从字符串中取出英文字母

    string fid = context.Request["value2"];//fid=FCT1234 Regex re = new Regex(@"[a-zA-Z]+ ...

  3. RIDE安装遇到的问题及解决方法

    1.按照虫师的方法,下载的wxpython3.0 ,启动robotframework-ride,无效,因为版本不一致,所以我又根据终端提示的网址:http://sourceforge.net/proj ...

  4. Hibernate持久化类属性映射

    Hibernate充当应用程序和数据库之间的中间件,实现二者之间的交互操作,他对JDBC进行了封装,以完全面向对象的方式来操作数据. 适用于有多个数据源的情况下,不必去考虑不同数据源的操作差异. Hi ...

  5. Python3利用BeautifulSoup4抓取站点小说全文的代码

    再写一个用BeautifulSoup抓站的工具,体会BeautifulSoup的强大. 根据小说索引页获取小说全部章节内容并在本地整合为小说全文.不过不是智能的,不同的站点对代码需要做相应的修改. # ...

  6. [刘阳Java]_什么是MyBatis_第1讲

    1.什么MyBatis,我们先通过百度百科先进行一个简单的了解 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation ...

  7. spring缓存

    Spring Cache使用详解   复制过来时的地址:http://blog.csdn.net/xiaoyu411502/article/details/48901555 标签: spring-bo ...

  8. python 正则re模块

    re.match re.match 尝试从字符串的开始匹配一个模式,如:下面的例子匹配第一个单词. import re text = "JGood is a handsome boy, he ...

  9. Android ContentProvider介绍

    在Android中数据的存储一共有五种形式,分别是:Shared Preferences.网络存储.文件存储,外储存储.SQLite.但是我们知道一般这些存储都只是在单独的一个应用程序之中达到一个数据 ...

  10. 20151208Study

    20151208-----------------------------------------------------* Her main interest now is raising her ...