深入浅出学习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实现爬虫下载漫画示例
Feb 16 Python
python实现获取序列中最小的几个元素
Sep 25 Python
Python HTMLParser模块解析html获取url实例
Apr 08 Python
Python每天必学之bytes字节
Jan 28 Python
python组合无重复三位数的实例
Nov 13 Python
Python开发网站目录扫描器的实现
Feb 21 Python
对python中基于tcp协议的通信(数据传输)实例讲解
Jul 22 Python
Python手绘可视化工具cutecharts使用实例
Dec 05 Python
python PIL/cv2/base64相互转换实例
Jan 09 Python
如何利用python检测图片是否包含二维码
Oct 15 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
Oct 15 Python
Python Pygame实战之塔防游戏的实现
Mar 17 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.MVC的模板标签系统(五)
2006/09/05 PHP
ThinkPHP的URL重写问题
2014/06/22 PHP
php获得网站访问统计信息类Compete API用法实例
2015/04/02 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
2017/02/08 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
PHPMAILER实现PHP发邮件功能
2018/04/18 PHP
javascript preload&lazy load
2010/05/13 Javascript
jQuery中创建实例与原型继承揭秘
2011/12/21 Javascript
JS滚轮事件onmousewheel使用介绍
2013/11/01 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
js实现简单随机抽奖的方法
2015/01/27 Javascript
javascript原始值和对象引用实例分析
2015/04/25 Javascript
jQuery获取复选框被选中数量及判断选择值的方法详解
2016/05/25 Javascript
jQuery实现一个简单的验证码功能
2017/06/26 jQuery
详解vue组件通信的三种方式
2017/06/30 Javascript
浅谈Vuejs中nextTick()异步更新队列源码解析
2017/12/31 Javascript
使用vue2.6实现抖音【时间轮盘】屏保效果附源码
2019/04/24 Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
2019/05/08 Javascript
JS中this的4种绑定规则详解
2020/02/04 Javascript
Python新手们容易犯的几个错误总结
2017/04/01 Python
关于python之字典的嵌套,递归调用方法
2019/01/21 Python
django使用JWT保存用户登录信息
2020/04/22 Python
Python之字符串的遍历的4种方式
2020/12/08 Python
python获取天气接口给指定微信好友发天气预报
2020/12/28 Python
狗狗玩具、零食和咀嚼物的月度送货服务:Super Chewer
2018/08/22 全球购物
欧缇丽加拿大官方网站:Caudalie加拿大
2019/07/18 全球购物
Timberland澳大利亚官网:全球领先的户外品牌
2019/12/10 全球购物
LINUX下线程,GDI类的解释
2012/04/17 面试题
四年级科学教学反思
2014/02/10 职场文书
保密承诺书范文
2014/03/27 职场文书
工厂门卫岗位职责范本
2014/04/04 职场文书
法人授权委托书公证范本
2014/09/14 职场文书
党政领导班子民主生活会整改措施
2014/09/18 职场文书
2015大学生实训报告
2014/11/05 职场文书
元素水平垂直居中的方式
2021/03/31 HTML / CSS
SpringCloud超详细讲解Feign声明式服务调用
2022/06/21 Java/Android