深入浅出学习python装饰器


Posted in Python onSeptember 29, 2017

之前就了解到了装饰器, 但是就会点皮毛, 而且对其调用方式感到迷茫,正好现在的项目我想优化,就想到了用装饰器, 因此深入研究了下装饰器.

先看下代码:

import time


# 将函数作为参数传入到此方法....
def timeif(func):
  def wrapper(arg):
    print("in wrapper() %s" % (arg))
    start = time.clock()
    func(arg)
    end = time.clock()
    print("used: %s %s" % (end-start, arg))
  return wrapper


@timeif
def foo(arg):
  print("in foo() %s" % (arg))


if __name__ == '__main__':
  foo(" Hello ") # 表示执行foo函数....

我的疑惑就是明明return 的是一个函数名,按道理来讲,返回的就是一个函数地址啊!我理解有问题?随后上网查资料,又是闭包....但是我个人对它不感冒,随后自己分析,总结出了一段程序,看完你就知道原因了.
程序:

# coding=utf-8
# 带参数的函数 返回一个函数地址就行....
def funX(x):
  def funY():
    return x
  return funY


# 不带参数的函数....
def funX1():
  print("调用函数funX1")

  def funY1():
    print("调用函数funY1")
  return funY1


if __name__ == '__main__':
  # print(funX(5)()) # 调用有参数的嵌套函数...
  
  print(funX1()()) # 调用无参数的嵌套函数...

这和我们的装饰器不像吗?这就是我们的装饰器!因此,我们可以按照上面的程序来理解,也就是说它是首先确定参数个数,随后分别传入的,下面,我们来改写代码:

# coding=utf-8
import time


# 将函数作为参数传入到此方法....
def timeif(func):
  def wrapper(arg):
    print("in wrapper() %s" % (arg))
    start = time.clock()
    func(arg)
    end = time.clock()
    print("used: %s %s" % (end-start, arg))
  return wrapper


# @timeif
def foo(arg):
  print("in foo() %s" % (arg))


if __name__ == '__main__':
  timeif(foo)(' Hello')

深入浅出学习python装饰器

深入浅出学习python装饰器

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中requests模块的使用方法
Apr 08 Python
Python手机号码归属地查询代码
May 04 Python
python 系统调用的实例详解
Jul 11 Python
SVM基本概念及Python实现代码
Dec 27 Python
Python字典中的键映射多个值的方法(列表或者集合)
Oct 17 Python
python绘制简单彩虹图
Nov 19 Python
对Python的多进程锁的使用方法详解
Feb 18 Python
wxPython+Matplotlib绘制折线图表
Nov 19 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
Jun 18 Python
Jmeter HTTPS接口测试证书导入过程图解
Jul 22 Python
Python 实现进度条的六种方式
Jan 06 Python
python接口测试返回数据为字典取值方式
Feb 12 Python
Python连接phoenix的方法示例
Sep 29 #Python
Python矩阵常见运算操作实例总结
Sep 29 #Python
利用python求解物理学中的双弹簧质能系统详解
Sep 29 #Python
python中装饰器级连的使用方法示例
Sep 29 #Python
python中map()函数的使用方法示例
Sep 29 #Python
python中reduce()函数的使用方法示例
Sep 29 #Python
Django Admin 实现外键过滤的方法
Sep 29 #Python
You might like
php地址引用(php地址引用的效率问题)
2012/03/23 PHP
封装ThinkPHP的一个文件上传方法实例
2014/10/31 PHP
php实现汉字验证码和算式验证码的方法
2015/03/07 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
2018/04/20 PHP
JS删除数组元素的函数介绍
2013/03/27 Javascript
Jquery 自定义动画概述及示例
2013/03/29 Javascript
JavaScript ParseFloat()方法
2015/12/18 Javascript
详解WordPress开发中get_current_screen()函数的使用
2016/01/11 Javascript
Javascript小技能总结(推荐)
2016/06/02 Javascript
JavaScript使用Range调色及透明度实例
2016/09/25 Javascript
BootStrap中Table分页插件使用详解
2016/10/09 Javascript
loading动画特效小结
2017/01/22 Javascript
Java与JavaScript中判断两字符串是否相等的区别
2017/03/13 Javascript
前端主流框架vue学习笔记第二篇
2017/07/26 Javascript
微信小程序人脸识别功能代码实例
2019/05/07 Javascript
JS中实现浅拷贝和深拷贝的代码详解
2019/06/05 Javascript
layui问题之自动滚动二级iframe页面到指定位置的方法
2019/09/18 Javascript
js中延迟加载和预加载的具体使用
2021/01/14 Javascript
使用Pyinstaller的最新踩坑实战记录
2017/11/08 Python
Python爬取商家联系电话以及各种数据的方法
2018/11/10 Python
Django框架搭建的简易图书信息网站案例
2019/05/25 Python
Python制作微信好友背景墙教程(附完整代码)
2019/07/17 Python
python基于plotly实现画饼状图代码实例
2019/12/16 Python
浅谈Python3实现两个矩形的交并比(IoU)
2020/01/18 Python
python 动态渲染 mysql 配置文件的示例
2020/11/20 Python
详解HTML5新增标签
2017/11/27 HTML / CSS
Canvas绘制浮动球效果的示例
2017/12/29 HTML / CSS
全球速卖通:AliExpress(国际版淘宝)
2017/09/20 全球购物
十岁生日家长答谢词
2014/01/17 职场文书
《北大荒的秋天》教学反思
2014/04/14 职场文书
小学模范班主任事迹材料
2014/05/13 职场文书
施工工地安全标语
2014/06/07 职场文书
中国梦口号
2014/06/13 职场文书
教师党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
离职证明范本
2015/06/12 职场文书
 Redis 串行生成顺序编码的方法实现
2022/04/03 Redis