python 装饰器初步学习
第一步 简单函数
''' 简单的函数:调用两次'''
def myfunc():
print ('myfunc() called.') myfunc()
myfunc()
第二步 装饰器为调用函数提供附加功能
'''替换函数(装饰)
装饰函数的参数是被装饰的函数对象,返回原函数对象
装饰的实质语句; myfunc = deco(myfunc)'''
def deco(func):
print ("before myfunc() called.")
func()
print (" after myfunc() called.")
return func def myfunc():
print (" myfunc() called.") myfunc = deco(myfunc)
myfunc()
myfunc()
第三步 使用语法 @ 来装饰函数
'''使用语法@来装饰函数,相当于 myfunc = deco(myfun)
但新函数只在第一次被调用,且原函数多调用一次'''
def deco(func):
print ("before myfunc() called.")
func()
print (" after myfunc() called.")
return func @deco
def myfunc():
print (" myfunc() called.") myfunc()
myfunc()
第四步 使用内嵌包装函数来确保每次新函数都被调用
'''使用内嵌包装函数来确保每次新函数都被调用,
内嵌包装函数的形参和返回值与原函数相同,装饰函数返回内嵌包装函数对象''' def deco(func):
def _deco():
print ("before myfunc() called.")
func()
print ("after myfunc() called.")
# 不需要返回func,实际上应返回原函数的返回值
return _deco @deco
def myfunc():
print (" myfunc() called.")
return 'ok' myfunc()
第五步 对具有参数的函数进行装饰
'''对带参数的函数进行装饰,内嵌包装函数的形参和返回值与原函数相同,
装饰函数返回内嵌包装函数对象''' def deco(func):
def _deco(a, b):
print ("before myfunc() called.")
f = func(a, b)
print ("after myfunc() called.")
return f
return _deco @deco
def myfunc(a, b):
print (" myfunc(%s, %s) called." %(a, b))
return a + b print myfunc(1, 2)
更深入的学习会继续!
参考资料:http://blog.csdn.net/thy38/article/details/4471421
http://www.cnblogs.com/huxi/archive/2011/03/01/1967600.html
http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318435599930270c0381a3b44db991cd6d858064ac0000
python 装饰器初步学习的更多相关文章
- Python装饰器模式学习总结
装饰器模式,重点在于装饰.装饰的核心仍旧是被装饰对象. 类比于Java编程的时候的包装模式,是同样的道理.虽然概念上稍有不同但是原理上还是比较相近的.下面我就来谈一谈我对Python的装饰器的学习的一 ...
- python装饰器的学习笔记
此博文是我对装饰器的一些理解,如果有错误欢迎及时留言,我会第一时间向大家学习. 一.什么是装饰器 1.从字面意义来看: 是用来给函数装饰打扮的函数 2.理论上可以理解为: (1).不改变函数的运行方式 ...
- 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 装饰器学习心得
最近打算重新开始记录自己的学习过程,于是就捡起被自己废弃了一年多的博客.这篇学习笔记主要是记录近来看的有关Python装饰器的东西. 0. 什么是装饰器? 本质上来说,装饰器其实就是一个特殊功能的函数 ...
- 【转】九步学习python装饰器
本篇日志来自:http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html 纯转,只字未改.只是为了学习一下装饰器.其实现在也是没有太看明白 ...
- Python学习:11.Python装饰器讲解(二)
回顾 上一节我们进行了Python简单装饰器的讲解,但是python的装饰器还有一部分高级的使用方式,这一节就针对python装饰器高级部分进行讲解. 为一个函数添加多个装饰器 今天,老板又交给你一个 ...
- python 装饰器学习(decorator)
最近看到有个装饰器的例子,没看懂, #!/usr/bin/python class decorator(object): def __init__(self,f): print "initi ...
随机推荐
- jquery验证
首先要引用js库 <script src="js/jquery-1.7.2.min.js"></script> jquery验证方式 function ch ...
- kendoui treeview grid spreadsheet
treeview 傻子方式获取id <!DOCTYPE html> <html> <head> <title>API</title> < ...
- Git查看、删除、重命名远程分支和tag(转)
转:http://zengrong.net/post/1746.htm 这篇文章记录我在使用git的过程中碰到远程分支和tag的相关内容,提纲: 查看远程分支 删除远程分支和tag 删除不存在对应远程 ...
- adb devices 不识别设备(或者偶尔识别设备) -破解
问题:当在CMD中输入adb devices时,没有设备信息显示,居然显示下面的信息 问题是有时候可以识别,有时候不可以识别.当被别人连接后,自己在连接是好的,过了一会以后又不好了
- memcached 分布式
memcached定义 memcached 是一套分布式的高速缓存系统,被广泛应用于应用系统的缓存层来提升应用程序的访问速度:memcache缺乏认证以及安全管制,这表明应将memcached服务器放 ...
- ms sql server 在cmd中执行sqlcmd的时候报错
cmd下直接输入sqlcmd会提示 错误: HResult 0x2,级别 16,状态 1命名管道提供程序: 无法打开与 SQL Server 的连接 [2].Sqlcmd: 错误: Microsoft ...
- 自动生成Model层中对应表的各个字段
select 'public '+ case t.name when 'varchar' then 'string' when 'smallint' then 'Int16' when 'int' t ...
- 修改win7电脑中所有文件的默认查看方式
怎么修改win7电脑中所有文件的默认查看方式 如何设置才可以得到如下的效果:比如说打开一个盘符或者一个文件夹,进行设置之后,这个盘符里或者这个文件夹下的所有子文件夹.所有子文件夹里的所有文件都以“ ...
- 一种模拟position: sticky;的方法
直接上代码,本例采用了jQuery来进行介绍 CSS部分: .sticky { position: fixed; top: 0; } JS部分: var stickyBar = $('.sticky- ...
- BZOJ4350: 括号序列再战猪猪侠
Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个合法的括号序列. 2.若A是合法的括号序列 ...