最近项目太忙好久没有学习python了,今天更新一下吧~~

1.什么是python装饰器:

  装饰器本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外的功能,装饰器的返回值也是一个函数对象,它经常用于有切面的需求的场景,比如:插入日志,性能测试,事务处理,缓存,权限校验等场景,装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用

概括的讲,装饰器的作用就是为已存在的函数或对象添加额外的功能

2.上代码练习初级装饰器的写法:

  

 """定义一个装饰器"""

 def debug(func):
def wrapper():
print("[debug]:enter {} ()".format(func))
return func()
return wrapper @debug
def say_hello():
print('hello') say_hello() """这个debug函数其实就是一个装饰器,他对原函数进行了包装并返回了另外一个函数,额外添加了一些功能""" """这是一个最简单的装饰器,那么一个问题也出现了,如果被装饰的函数需要传入参数,那么这个装饰器就坏了,因为返回的函数并不能接受参数,可以修改为
指定装饰器函数wrapper接受和原函数一样的参数如:
""" def debug2(func):
def wrapper(saysomething):
print("[debug]:enter {} ()".format(func))
return func(saysomething)
return wrapper @debug2
def say_hello1(saysomething):
print(saysomething) say_hello1('哈哈哈') """但是又出现了n个问题,因为有很多函数,你只管你自己的函数,别人的函数参数是什么样子,那么解决方案就是python提供了可变参数
*args和关键字参数**kwargs,有了这两个参数,装饰器就可以用于任意目标函数了.
""" def debug3(func):
def wrapper(*args,**kwargs):
print("[debug]:enter {} ()".format(func))
print('Prepare and say...')
return func(*args,**kwargs)
return wrapper @debug3
def say(something):
print('hello{}'.format(something)) @debug3
def say1(one,two):
print('先说一件事:{} 再说第二件事:{}'.format(one,two)) say('说一下可变参数')
say1('下班','吃饭') """恭喜你至此,你已经掌握了初级的装饰器的写法"""

后续在深入学习装饰器的写法~~~

python初级装饰器编写的更多相关文章

  1. python基础——装饰器

    python基础——装饰器 由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数. >>> def now(): ... print('2015-3-25 ...

  2. 【转】详解Python的装饰器

    原文链接:http://python.jobbole.com/86717/ Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都在那里. 为什么需要装饰器 我们假设你的程序实现 ...

  3. 两个实用的Python的装饰器

    两个实用的Python的装饰器 超时函数 这个函数的作用在于可以给任意可能会hang住的函数添加超时功能,这个功能在编写外部API调用 .网络爬虫.数据库查询的时候特别有用 timeout装饰器的代码 ...

  4. 详解Python的装饰器

    Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都在那里. 为什么需要装饰器 我们假设你的程序实现了say_hello()和say_goodbye()两个函数. def sa ...

  5. Python学习---装饰器的学习1210

    装饰器的基础 学习前提: 作用域 + 函数的理解 + 闭包  [学习,理解] 代码编写原则: 对修改开放对扩展开放 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前 ...

  6. Python设计模式-装饰器模式

    装饰器模式 装饰器模式,动态地给一个对象添加一些额外的职责,就增加功能来说,装饰器模式比生成子类更为灵活. 代码示例 #coding:utf-8 #装饰器模式 class Beverage():   ...

  7. Python的装饰器实例用法小结

    这篇文章主要介绍了Python装饰器用法,结合实例形式总结分析了Python常用装饰器的概念.功能.使用方法及相关注意事项 一.装饰器是什么 python的装饰器本质上是一个Python函数,它可以让 ...

  8. 进阶Python:装饰器 全面详解

    进阶Python:装饰器 前言 前段时间我发了一篇讲解Python调试工具PySnooper的文章,在那篇文章开始一部分我简单的介绍了一下装饰器,文章发出之后有几位同学说"终于了解装饰器的用 ...

  9. Python函数装饰器原理与用法详解《摘》

    本文实例讲述了Python函数装饰器原理与用法.分享给大家供大家参考,具体如下: 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值 ...

随机推荐

  1. android linux 传文件

    EStrongs File Explorer 即: Es文件浏览器 网络 -> 远程管理器 设置 ->设置根目录 linux 使用浏览器访问即可.

  2. sql中distinct和order by问题的解决方案

    需求:根据PID字段对数据去重,根据Sort字段排序,需要显示这个两个字段. 如图,这是原始数据,先排序: 排序后发现两个项是重复的,需要去除一个, 因为Distinct对检查Select里面的每一列 ...

  3. 数据快速批量添加到Elasticsearch

    如何把数据快速批量添加到Elasticsearch中 问题来源 最近新做一个项目,有部分搜索比较频繁的数据,而且量级比较大,预计一两年时间很可能达到100G,项目要求不要存在数据库中,最终出来有两个方 ...

  4. Windows之文件夹中打开PowerShell

    Windows之文件夹中打开PowerShell 为了解决Windows中在某个路径下使用PowerShell,而不是使用传统的cd命令切换过去,具体做法如下: 方法一 打开文件夹 在文件夹的内容区按 ...

  5. PHP安装pecl扩展--通用

    虽然现在composer很流行,但是有时候,我们还是要安装pecl的扩展. pecl扩展可以在pecl.php.net中查看,想要什么扩展,可以去搜索,比如xdebug.siege.memcached ...

  6. node学习: package.json

    package.json 定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称.版本.许可证等元数据) 1.创建 package.json npm init npm init –yes 2.p ...

  7. tomcat启动参数

    /usr/java/jdk1..0_191-amd64/bin/java -Djava.util.logging.config./conf/logging.properties -Djava.util ...

  8. Linux sudoers

    xxx is not in the sudoers file.This incident will be reported.的解决方法 - xiaochaoyxc - 博客园http://www.cn ...

  9. CSS小东西

    1.表格列自动均分 table-layout:fixed; 2.单元格内容自动换行 word-wrap:break-word;

  10. MySQL数据类型优化—整数类型优化选择

    原文:http://bbs.landingbj.com/t-0-240002-1.html 在设计数据库的时候,整数类型的使用时不可避免的如ID,类型等. 在选择整数的同时主要是考虑是数据范围,如是否 ...