深入浅出学习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 域名分析工具实现代码
Jul 15 Python
python 字符串split的用法分享
Mar 23 Python
python连接oracle数据库实例
Oct 17 Python
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
May 28 Python
Python自定义线程池实现方法分析
Feb 07 Python
python使用TensorFlow进行图像处理的方法
Feb 28 Python
Python利用公共键如何对字典列表进行排序详解
May 19 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
Jul 15 Python
用Anaconda安装本地python包的方法及路径问题(图文)
Jul 16 Python
python画图常规设置方式
Mar 05 Python
详解python如何引用包package
Jun 07 Python
关于python中readlines函数的参数hint的相关知识总结
Jun 24 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文件缓存smarty模板应用实例分析
2016/02/26 PHP
PHP连接数据库实现注册页面的增删改查操作
2016/03/27 PHP
PDO::commit讲解
2019/01/27 PHP
Javascript 跨域访问解决方案
2009/02/14 Javascript
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
解决IE6的PNG透明JS插件使用介绍
2013/04/17 Javascript
初识SmartJS - AOP三剑客
2014/06/08 Javascript
nodejs开发环境配置与使用
2014/11/17 NodeJs
javascript框架设计读书笔记之数组的扩展与修复
2014/12/02 Javascript
jquery简单图片切换显示效果实现方法
2015/01/14 Javascript
JavaScript 浏览器兼容性总结及常用浏览器兼容性分析
2016/03/30 Javascript
JS版微信6.0分享接口用法分析
2016/10/13 Javascript
JS前向后瞻正则表达式定义与用法示例
2016/12/27 Javascript
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
2017/05/19 jQuery
JS中数组与对象的遍历方法实例小结
2018/08/14 Javascript
vuejs选中当前样式active的实例
2018/08/22 Javascript
[02:49]DAC2018决赛日TOP5 LGD开启黑暗之门绝杀VP
2018/04/08 DOTA
Unicode和Python的中文处理
2017/03/19 Python
Python使用functools实现注解同步方法
2018/02/06 Python
Win系统PyQt5安装和使用教程
2019/12/25 Python
Python3 全自动更新已安装的模块实现
2020/01/06 Python
Python之关于类变量的两种赋值区别详解
2020/03/12 Python
pycharm工具连接mysql数据库失败问题
2020/04/01 Python
如何解决安装python3.6.1失败
2020/07/01 Python
通过代码实例了解Python异常本质
2020/09/16 Python
Python中Pyspider爬虫框架的基本使用详解
2021/01/27 Python
欧洲著名的二手奢侈品网站:Vestiaire Collective
2020/03/07 全球购物
十八届三中全会感言
2014/03/10 职场文书
单位消防安全责任书
2014/07/23 职场文书
《中国梦我的梦》中学生演讲稿
2014/08/20 职场文书
暑期培训班策划方案
2014/08/26 职场文书
党员教师群众路线对照检查材料思想汇报
2014/09/29 职场文书
宇宙与人观后感
2015/06/05 职场文书
Redis中有序集合的内部实现方式的详细介绍
2022/03/16 Redis
【js设计模式】SOLID五大设计原则
2022/03/24 Javascript
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS