python核心编程学习笔记-2016-08-06-01-装饰器
来源:互联网 发布:宁波网络公关方案 编辑:程序博客网 时间:2024/06/12 20:09
装饰器
语法:
@decorator(dec_opt_args)def func2Bdecorated(func_opt_args): :其等价于
def func2Bdecorated(func_opt_args): :func2Bdecorated = decorator(dec_opt_args)(func2Bdecorated)有点抽象,装饰器本质上是一个函数,只不过这个函数比较特殊。它以一个函数对象为参数,并且返回值也是函数对象。
装饰器分为无参数和有参数两种情形。
无参数情况最简单。如下:
@gdef f(): pass显然其等价于
def f(): passf = g(f)这有点类似于数学上的复合函数。(g * f) (x) = g(f(x))
针对有参数的装饰器,也很好理解。如下:
@g(a)def f(): passg(a)是一个函数,它的返回值是一个装饰器(本质上是函数对象),而这一装饰器以函数对象f为参数。所以等价于
def f(): passf = g(a)(f)至于书中提到的面向方面编程和装饰器的相关用途,本人小白一枚,不了解,以后再说吧。
最后是书中例子。
#-*-coding: utf-8-*-from time import ctime, sleep# 定义装饰器,以函数对象为参数,显示何时调用函数的时戳的装饰器def tsfunc(func): def wrappedFunc(): # 内部函数,该函数增加了时戳,以及调用外部函数的参数,即func。这就是闭包? print "[%s] %s() called" % (ctime(), func.__name__) return func() return wrappedFunc # 返回闭包?@tsfuncdef foo(): passfoo() # 函数foo()立刻被调用sleep(4) # 等待4sfor i in range(2): # 再调用两次 sleep(1) # 每次调用前等待1s,即第5(= 4 + 1)s后被调用,和第6s被调用 foo()闭包什么的纯属瞎猜。
0 0
- python核心编程学习笔记-2016-08-06-01-装饰器
- python核心编程学习笔记-2016-08-26-01-文件传输
- python高级编程-装饰器学习笔记
- python核心编程-函数-装饰器
- python核心编程学习笔记【2016-10-06】
- python核心编程学习笔记-2016-08-13-03-授权
- python核心编程学习笔记【2016-10-08】
- python核心编程学习笔记-2016-07-18-01-print
- Python-核心编程-学习笔记
- 《python核心编程》学习笔记
- 《Python核心编程》学习笔记
- 《python核心编程》学习笔记
- python核心编程学习笔记-2016-08-27-01-多线程编程
- python核心编程学习笔记-2016-08-29-01-图形化用户界面编程(一:)
- 【Python学习笔记】函数式编程:装饰器
- python学习笔记(30)--元编程1-装饰器
- Python核心编程学习笔记-Python核心编程第七章
- python核心编程学习笔记-2016-08-13-06-元类
- [模板]高精度加、减、乘
- HDU 5783 Divide the Sequence 思维题
- 第三章 3.22
- android自定义View打造自己的专属控件——风车控件
- UVA 1599 Ideal Path
- python核心编程学习笔记-2016-08-06-01-装饰器
- <Python核心编程>笔记(一)
- 数据结构实验之栈七:出栈序列判定
- 例说Hausdorff距离
- Windows上jdk+tomcat+mysql 安装
- 错误:唯一密钥属性“value”设置…无法添加类型为add
- react + redux + react-redux 心得
- Leetcode Word Break II
- 实例讲解虚拟机3种网络模式(桥接、nat、Host-only)