深入浅出学习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数据结构之Array用法实例
Oct 09 Python
Python字符串特性及常用字符串方法的简单笔记
Jan 04 Python
Using Django with GAE Python 后台抓取多个网站的页面全文
Feb 17 Python
Bottle框架中的装饰器类和描述符应用详解
Oct 28 Python
pycharm下查看python的变量类型和变量内容的方法
Jun 26 Python
python SVD压缩图像的实现代码
Nov 05 Python
python shell命令行中import多层目录下的模块操作
Mar 09 Python
python中加背景音乐如何操作
Jul 19 Python
学习Python爬虫的几点建议
Aug 05 Python
Python通过len函数返回对象长度
Oct 22 Python
Pyside2中嵌入Matplotlib的绘图的实现
Feb 22 Python
Anaconda安装pytorch和paddle的方法步骤
Apr 03 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生成不重复随机数的方法汇总
2014/11/19 PHP
php 类自动载入的方法
2015/06/03 PHP
Yii净化器CHtmlPurifier用法示例(过滤不良代码)
2016/07/15 PHP
javascript:void(0)的真正含义实例分析
2008/08/20 Javascript
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
2012/01/04 Javascript
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
JQuery中extend使用介绍
2014/03/13 Javascript
js实现照片墙功能实例
2015/02/05 Javascript
自定义刻度jQuery进度条及插件
2015/09/02 Javascript
微信小程序 合法域名校验出错详解及解决办法
2017/03/09 Javascript
从零开始做一个pagination分页组件
2017/03/15 Javascript
详解JavaScript中return的用法
2017/05/08 Javascript
vue组件间通信子与父详解(二)
2017/11/07 Javascript
JavaScript实现区块链
2018/03/14 Javascript
JavaScript EventEmitter 背后的秘密 完整版
2018/03/29 Javascript
jQuery解析json格式数据示例
2018/09/01 jQuery
微信小程序文章详情页跳转案例详解
2019/07/09 Javascript
Vue检测屏幕变化来改变不同的charts样式实例
2020/10/26 Javascript
python基础教程之缩进介绍
2014/08/29 Python
跟老齐学Python之使用Python操作数据库(1)
2014/11/25 Python
python使用urlparse分析网址中域名的方法
2015/04/15 Python
详细解析Python中的变量的数据类型
2015/05/13 Python
python学习之第三方包安装方法(两种方法)
2015/07/30 Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
2017/01/21 Python
python win32 简单操作方法
2017/05/25 Python
Python3处理HTTP请求的实例
2018/05/10 Python
python 3.3 下载固定链接文件并保存的方法
2018/12/18 Python
django的ORM模型的实现原理
2019/03/04 Python
python numpy 矩阵堆叠实例
2020/01/17 Python
HTML5之语义标签介绍
2016/07/07 HTML / CSS
工程部经理岗位职责
2013/12/08 职场文书
党员十八大心得体会
2014/09/12 职场文书
教师自查自纠工作情况报告
2014/10/29 职场文书
普宁寺导游词
2015/02/04 职场文书
怎样写工作总结啊!
2019/06/18 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers