深入浅出学习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存取XML的常见方法实例分析
Mar 21 Python
python条件变量之生产者与消费者操作实例分析
Mar 22 Python
windows系统下Python环境搭建教程
Mar 28 Python
Python实现将文本生成二维码的方法示例
Jul 18 Python
python判断字符串是否是json格式方法分享
Nov 07 Python
python微信跳一跳游戏辅助代码解析
Jan 29 Python
使用urllib库的urlretrieve()方法下载网络文件到本地的方法
Dec 19 Python
Python 中的 global 标识对变量作用域的影响
Aug 12 Python
使用python求解二次规划的问题
Feb 29 Python
windows python3安装Jupyter Notebooks教程
Apr 13 Python
python 实现 hive中类似 lateral view explode的功能示例
May 18 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
Sep 29 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 获取当前访问的url文件名的方法小结
2010/02/08 PHP
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
2013/07/18 PHP
PHP的pcntl多进程用法实例
2015/03/19 PHP
PHP读取PPT文件的方法
2015/12/10 PHP
在 Laravel 中 “规范” 的开发短信验证码发送功能
2017/10/26 PHP
为radio类型的INPUT添加客户端脚本(附加实现JS来禁用onClick事件思路代码)
2010/11/11 Javascript
jquery 模板的应用示例
2013/11/12 Javascript
window.showModalDialog()返回值的学习心得总结
2014/01/07 Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
2015/03/12 Javascript
JavaScript截取、切割字符串的技巧
2016/01/07 Javascript
jQuery简单实现提交数据出现loading进度条的方法
2016/03/29 Javascript
微信小程序加载更多 点击查看更多
2016/11/29 Javascript
bootstrap table使用入门基本用法
2017/05/24 Javascript
JS简单实现点击跳转登陆邮箱功能的方法
2017/10/31 Javascript
layer弹出的iframe层在执行完毕后关闭当前弹出层的方法
2018/08/17 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
2019/12/06 Javascript
vue在App.vue文件中监听路由变化刷新页面操作
2020/08/14 Javascript
javascript实现搜索筛选功能实例代码
2020/11/12 Javascript
python对字典进行排序实例
2014/09/25 Python
python 随机生成10位数密码的实现代码
2019/06/27 Python
python使用dlib进行人脸检测和关键点的示例
2020/12/05 Python
纯HTML5+CSS3制作图片旋转
2016/01/12 HTML / CSS
详解CSS3阴影 box-shadow的使用和技巧总结
2016/12/03 HTML / CSS
x-ua-compatible content=”IE=7, IE=9″意思理解
2013/07/22 HTML / CSS
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
精选干货:Java精选笔试题附答案
2014/01/18 面试题
老师推荐信
2013/10/28 职场文书
国庆节促销广告语2014
2014/09/19 职场文书
乡镇机关党员民主评议表自我评价
2014/09/21 职场文书
2014教育局对照检查材料思想汇报
2014/09/23 职场文书
学校四风问题对照检查材料思想汇报
2014/09/26 职场文书
营业用房租赁协议书
2014/11/26 职场文书
优秀党员推荐材料
2014/12/18 职场文书
党员反邪教心得体会
2016/01/15 职场文书
小学英语教学反思范文
2016/02/15 职场文书
python实现自动化群控的步骤
2021/04/11 Python