深入浅出学习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 socket 超时设置 errno 10054
Jul 01 Python
在Python程序中实现分布式进程的教程
Apr 28 Python
python实现的系统实用log类实例
Jun 30 Python
Python学习入门之区块链详解
Jul 25 Python
python email smtplib模块发送邮件代码实例
Apr 26 Python
python多线程实现代码(模拟银行服务操作流程)
Jan 13 Python
用Python在Excel里画出蒙娜丽莎的方法示例
Apr 28 Python
如何利用Python识别图片中的文字
May 31 Python
简单了解Python字典copy与赋值的区别
Sep 16 Python
Python中常用的os操作汇总
Nov 05 Python
python字典进行运算原理及实例分享
Aug 02 Python
Python办公自动化PPT批量转换操作
Sep 15 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危险函数(disable_functions)
2012/02/23 PHP
phpstudy的php版本自由修改的方法
2017/10/18 PHP
List Installed Hot Fixes
2007/06/12 Javascript
js点击页面其它地方将某个显示的DIV隐藏
2012/07/12 Javascript
jquery索引在使用中的一些困惑
2013/10/24 Javascript
Validform+layer实现漂亮的表单验证特效
2016/01/17 Javascript
jstree的简单实例
2016/12/01 Javascript
JS实现拖拽的方法分析
2016/12/20 Javascript
jQuery仿IOS弹出框插件
2017/02/18 Javascript
canvas实现弧形可拖动进度条效果
2017/05/11 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
2017/05/11 Javascript
使用jQuery实现两个div中按钮互换位置的实例代码
2017/09/21 jQuery
手淘flexible.js框架使用和源代码讲解小结
2018/10/15 Javascript
JavaScript禁用右键单击优缺点分析
2019/01/20 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
python实现bucket排序算法实例分析
2015/05/04 Python
Python获取SQLite查询结果表列名的方法
2017/06/21 Python
如何在django里上传csv文件并进行入库处理的方法
2019/01/02 Python
python如何实现视频转代码视频
2019/06/17 Python
Python 日志logging模块用法简单示例
2019/10/18 Python
python实现的批量分析xml标签中各个类别个数功能示例
2019/12/30 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
2020/04/22 Python
Python中zipfile压缩文件模块的基本使用教程
2020/06/14 Python
基于Python实现下载网易音乐代码实例
2020/08/10 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
2021/01/27 Python
爱尔兰电子产品购物网站:Komplett.ie
2018/04/04 全球购物
客服文员岗位职责
2013/11/29 职场文书
开学典礼决心书
2014/03/11 职场文书
辩论赛主持词
2014/03/18 职场文书
社区清明节活动总结
2014/07/04 职场文书
股指期货心得体会
2014/09/13 职场文书
小学班主任评语
2014/12/29 职场文书
2015年党日活动总结范文
2015/03/25 职场文书
标准演讲稿格式结尾应该怎么书写?
2019/07/17 职场文书
python 如何获取页面所有a标签下href的值
2021/05/06 Python
Vue的生命周期一起来看看
2022/02/24 Vue.js