python初级装饰器编写
最近项目太忙好久没有学习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初级装饰器编写的更多相关文章
- python基础——装饰器
python基础——装饰器 由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数. >>> def now(): ... print('2015-3-25 ...
- 【转】详解Python的装饰器
原文链接:http://python.jobbole.com/86717/ Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都在那里. 为什么需要装饰器 我们假设你的程序实现 ...
- 两个实用的Python的装饰器
两个实用的Python的装饰器 超时函数 这个函数的作用在于可以给任意可能会hang住的函数添加超时功能,这个功能在编写外部API调用 .网络爬虫.数据库查询的时候特别有用 timeout装饰器的代码 ...
- 详解Python的装饰器
Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都在那里. 为什么需要装饰器 我们假设你的程序实现了say_hello()和say_goodbye()两个函数. def sa ...
- Python学习---装饰器的学习1210
装饰器的基础 学习前提: 作用域 + 函数的理解 + 闭包 [学习,理解] 代码编写原则: 对修改开放对扩展开放 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前 ...
- Python设计模式-装饰器模式
装饰器模式 装饰器模式,动态地给一个对象添加一些额外的职责,就增加功能来说,装饰器模式比生成子类更为灵活. 代码示例 #coding:utf-8 #装饰器模式 class Beverage(): ...
- Python的装饰器实例用法小结
这篇文章主要介绍了Python装饰器用法,结合实例形式总结分析了Python常用装饰器的概念.功能.使用方法及相关注意事项 一.装饰器是什么 python的装饰器本质上是一个Python函数,它可以让 ...
- 进阶Python:装饰器 全面详解
进阶Python:装饰器 前言 前段时间我发了一篇讲解Python调试工具PySnooper的文章,在那篇文章开始一部分我简单的介绍了一下装饰器,文章发出之后有几位同学说"终于了解装饰器的用 ...
- Python函数装饰器原理与用法详解《摘》
本文实例讲述了Python函数装饰器原理与用法.分享给大家供大家参考,具体如下: 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值 ...
随机推荐
- 每秒高达1.6亿次操作的并发键值存储库 FASTER 诞生
FASTER 在过去十年中,云中的数据密集型应用程序和服务有了巨大的增长.数据在各种边设施(例如,设备,浏览器和服务器)上创建,并由云应用程序处理用来获得数据价值或做出决策.应用程序和服务可以处理收集 ...
- OO博客作业3:第9-11周作业总结
一.总结介绍规格化设计的大致发展历史和为什么得到了人们的重视 1.规格化设计的大致发展历史 规格化设计,又称契约式设计,最早由Bertrand Meyer于1986年提出,出自于<面向对象软件构 ...
- 二、截取字符串长度(css方式)
只针对谷歌 width: 100%; //height: 58px; overflow:hidden; text-overflow:ellipsis; display: -webkit-box; -w ...
- img :src=“” url()
<img :src="logoImg"> this.logoImg='/static/images/'+adminUser.Logo; v-bind:style=&qu ...
- 关于XLL加载项动态加载、卸载的演示及XLL函数自定义类型注册的演示
1.在XLL中,把函数定义成不同的类型,在Excel中的实际效果也不同,具体如下: pxMacroType value ...
- iOS iCloud云存储数据
https://www.jianshu.com/p/ce8cfaf6030e 2017.11.29 16:05* 字数 452 阅读 302评论 0喜欢 1 因为上一次做了用keychain来持久化存 ...
- .net之httphandler小记
本地调试代码遇到的一个问题,没有走URL路由器(UrlReWriter : IHttpHandlerFactory),于是网上科普了一下原理,主要有两点: 1.asp.net在处理http请求时,会由 ...
- Linux reboot与init 6区别
Reboot与init 6的区别 - flyingcloud_2008的专栏 - CSDN博客https://blog.csdn.net/flyingcloud_2008/article/detail ...
- c# Mongodb两个字段不相等 MongoDB原生查询
var document = new BsonDocument{ { "$where","this.StarTime!=this.EndTime"}, { }, ...
- ES6学习之let
块级作用域 ; i < ; i++){} console.log(i); ; j < ; j++){} console.log(j); //"ReferenceError: j ...