python 装饰器学习(decorator)
最近看到有个装饰器的例子,没看懂,
#!/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)的更多相关文章
- Python 装饰器学习
Python装饰器学习(九步入门) 这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 1 2 3 4 5 6 7 8 # -*- c ...
- (转载)Python装饰器学习
转载出处:http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html 这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方 ...
- Python装饰器学习
Python装饰器学习(九步入门) 这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 ? 1 2 3 4 5 6 7 8 # -*- ...
- Python——装饰器(Decorator)
1.什么是装饰器? 装饰器放在一个函数开始定义的地方,它就像一顶帽子一样戴在这个函数的头上.和这个函数绑定在一起.在我们调用这个函数的时候,第一件事并不是执行这个函数,而是将这个函数做为参数传入它头顶 ...
- Python装饰器(decorator)
了解装饰器,要先了解闭包. 1,闭包(closure) 闭包是Python所支持的一种特性,它让在非global scope定义的函数可以引用其外围空间中的变量,这些外围空间中被引用的变量叫做这个函数 ...
- Python 装饰器学习心得
最近打算重新开始记录自己的学习过程,于是就捡起被自己废弃了一年多的博客.这篇学习笔记主要是记录近来看的有关Python装饰器的东西. 0. 什么是装饰器? 本质上来说,装饰器其实就是一个特殊功能的函数 ...
- Python 装饰器(Decorator)
装饰器的语法为 @dec_name ,置于函数定义之前.如: import atexit @atexit.register def goodbye(): print('Goodbye!') print ...
- Python 装饰器学习以及实际使用场景实践
前言 前几天在看Flask框架,对于非常神奇的@语法,不是非常的理解,回来补装饰器的功课.阅读很多的关于装饰器的文章,自己整理一下,适合自己的思路的方法和例子,与大家分享. app = Flask(_ ...
- Python装饰器学习(九步入门)
这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 ? 1 2 3 4 5 6 7 8 # -*- coding:gbk -*- '''示 ...
随机推荐
- python时间函数学习
格式化当前日期: import time print time.strftime('%Y-%m-%d') 获取一天前的日期: import datetime import time onedayago ...
- UML(统一建模语言)
需求分析阶段 用例图 定义:用例图并不是用来描述用例的.用例图的主要作用是:直观地描述系统对外提供的功能. 用例图的三个要素:角色.系统.用例 用例图的关系: 角色和用例的关系:有关和无关 用例和用例 ...
- angular+ionic返回上一页并刷新
假定当前页面为editCata页面,要返回的是cataDetail页面.目前我找到两种方法实现返回上一页并刷新,如果以后有其它方法,再继续添加. 1.在editCataCtrl.js中注入$ionic ...
- (引用)Python 生成随机数小结
转载:http://blog.csdn.net/shuaijiasanshao/article/details/51339438
- SQL Server 2008 修改表所有者,架构
ALTER SCHEMA 新架构 TRANSFER 旧架构.对象名称
- Unity(四)IocContainer 封装类库
首先要在项目中安装Unity,通过NuGet搜索Unity. 1.定义接口 IDependencyResolver using System; using System.Collections.Gen ...
- Oracle 11G在用EXP 导出时,空表不能导出解决
Oracle 11G在用EXP 导出时,空表不能导出解决 (转)(.http://wanwentao.blog.51cto.com/2406488/545154 11G中有个新特性,当表无数据时,不分 ...
- js常用方法
若未声明,则都是js的方法 1.indexOf indexOf(str):默认返回字符串中第一次出现索引位置 的下标,没有则返回-1 indexOf(str,position):返回从position ...
- 记一次PHP7+opcache+zmq出现SIGSEGV 问题的查找(一次不成功的bug查找)
Title: 记一次PHP7+opcache+zmq出现SEGSEGV问题的查找(一次不成功的bug查找) bug来历自述:线上代码PHP环境是5.2,为了提升性能(逼格),于是升级为PHP7并使用 ...
- PC和HOST之间文件传送
从PC到HOST 文件传送表(*.srl) C:\123.txt text ~'LIANG.TEST.LIB.123' 批处理文件(*.bat) SEND "PC文件全路径" 'H ...