Python 装饰器笔记
一、装饰器无参数
1.原函数无参数
def wrap_in_tag_b(fn): # wrap_in_tag_b 是真正的装饰器def wrapped():return "<b>" + fn() + "</b>"return wrappeddef wrap_in_tag_i(fn):def wrapped():return "<i>" + fn() + "</i>"return wrapped@wrap_in_tag_b @wrap_in_tag_i def hello():return "hello"print(hello()) # returns "<b><i>hello world</i></b>"
2.原函数带参数
def wrap_in_tag_b(fn):def wrapped(arg): # arg 是原函数参数return "<b>" + fn(arg) + "</b>"return wrappeddef wrap_in_tag_i(fn):def wrapped(arg): # arg 是原函数参数return "<i>" + fn(arg) + "</i>"return wrapped@wrap_in_tag_b @wrap_in_tag_i def hello(name):return "hello {}".formar(name)print(hello('Jack'))
二、装饰器带参数
1.原函数无参数
def wrap_in_tag(deco_arg):# 装饰器参数:deco_arg# 可以在任意位置使用def real_decorator(func): # real_decorator才是即将返回的真正的装饰器# 原函数参数:func_arg # 只可以在此位置使用 def wrapped() :return "<{0}>{1}</{0}>".format(deco_arg, func())return wrappedreturn real_decorator@wrap_in_tag('b') @wrap_in_tag('i') def hello():return "hello"print(hello())
2.原函数带参数
def wrap_in_tag(deco_arg):# 装饰器参数:deco_arg# 可以在任意位置使用def real_decorator(func): # real_decorator才是即将返回的真正的装饰器def wrapped(func_arg):# 原函数参数:func_arg# 只可以在此位置使用return "<{0}>{1}</{0}>".format(deco_arg, func(func_arg))return wrappedreturn real_decorator@wrap_in_tag('b') @wrap_in_tag('i') def hello(name):return "hello {}".format(name)print(hello('Jack'))
三、装饰器类
1.原函数无参数
class wrap_in_tag(object):def __init__(self, deco_arg):self.tag = deco_arg # 装饰器参数:deco_argdef __call__(self, func):def newf(): # 原函数无参数return "<{0}>{1}</{0}>".format(self.tag, func())return newf@wrap_in_tag('b') @wrap_in_tag('i') def hello():return 'hello'print(hello())
2.原函数带参数
class wrap_in_tag(object):def __init__(self, deco_arg):self.tag = deco_arg # 装饰器参数:deco_argdef __call__(self, func):def newf(func_arg): # 原函数参数: func_argreturn "<{0}>{1}</{0}>".format(self.tag, func(func_arg))return newf@wrap_in_tag('b') @wrap_in_tag('i') def hello(name):return "hello {}".format(name)print(hello('Jack'))
四、用装饰器装饰类
1.用函数作为装饰器
def wrap_in_tag(deco_arg):def real_decorator(func):def wrapped(self, func_arg): # 类方法接收第一个参数都是self,这个必须有,而无论func_arg是否有!!!return "<{0}>{1}</{0}>".format(deco_arg, func(func_arg))return wrappedreturn real_decoratorclass foo(object):@wrap_in_tag('b')@wrap_in_tag('i')def hello(self, name):return 'hello {}".format(name) @wrap_in_tag('b')@wrap_in_tag('i')def byebye(self, name):return 'byebye {}".format(name) f = foo() print(f.hello('Jack')
2.用类作为装饰器
class wrap_in_tag(object):def __init__(self, deco_arg):self.tag = deco_argdef __call__(self, func):def newf(slf, func_arg): # slf必须!self被占用了,那就给第一个参数另一个名字slf(随便)return "<{0}>{1}</{0}>".format(self.tag, func(func_arg))return newfclass foo(object):@wrap_in_tag('b')@wrap_in_tag('i')def hello(self, name):return 'hello {}".format(name) @wrap_in_tag('b')@wrap_in_tag('i')def byebye(self, name):return 'byebye {}".format(name)
f = foo() print(f.hello('Jack'))
本文转自罗兵博客园博客,原文链接:http://www.cnblogs.com/hhh5460/p/5147103.html,如需转载请自行联系原作者
Python 装饰器笔记相关推荐
- Python装饰器学习笔记
Python装饰器 文章目录 Python装饰器 基本概念 从零开始的逐步分析 修饰后的问题 向被包装后的函数传递参数 使用场景:stdout日志 接受参数的装饰器 作为一个类的装饰器 总结 学习资料 ...
- [译] 12步轻松搞定python装饰器 - 简书
[译] 12步轻松搞定python装饰器 - 简书 呵呵!作为一名教python的老师,我发现学生们基本上一开始很难搞定python的装饰器,也许因为装饰器确实很难懂.搞定装饰器需要你了解一些函数式编 ...
- 一文读懂Python 装饰器函数
[摘要] Python装饰器的学习笔记 1. 初识装饰器 接下来,我们通过一个例子来为大家讲解这个装饰器: 需求介绍:你现在xx科技有限公司的开发部分任职,领导给你一个业务需求让你完成:让你写代码测试 ...
- python装饰器及functools模块
python装饰器及functools模块 本文是笔者学习python装饰器以及functools模块的笔记. 在开始学习之前,先在此列举出python函数的一些特性: 一切皆对象:python函数也 ...
- python简单装饰器_简单介绍Python装饰器(一)
装饰器的作用 相信大家在 探索过程中已经了解装饰器的作用,也有很多花里胡哨的介绍. 这次小冰也来讲解一下关于Python装饰器的一些小知识. 它的作用: 性能测试 日志 安全验证 ...... 相信大 ...
- Python装饰器的神奇功能:自动打印每个方法耗时
问题: 运行代码时,尤其对于大型项目需要分析每个环节方法耗时的.每个方法前后都写计算耗时及日志打印太繁琐了,而且代码不精简. 解决: Python装饰器类似于Spring的 AOP(Aspect Or ...
- python装饰器教学_Python装饰器学习(九步入门)
这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 # -*- coding:gbk -*- '''示例1: 最简单的函数,表示调用了两次 ...
- 简单介绍python装饰器
这篇文章简单介绍一下python装饰器,希望对你们有所帮助. 简单正常python例子: def up(text):return text.upper() #转成大写 def lo(text):ret ...
- Python装饰器是什么?使用Python装饰器实现计算程序(函数)运行时间的功能
Python装饰器是什么?使用Python装饰器实现计算程序(函数)运行时间的功能 目录
最新文章
- js去el的map_转:el表达式获取map对象的内容 js中使用el表达式 js 中使用jstl 实现 session.removeattribute...
- ASP.NET Core 2 学习笔记(四)依赖注入
- 未来,让我们一起想象 — “Imagine” 阿里云视频云全景创新峰会
- 算法:位运算加减乘除
- centos7安装mysql允许远程连接_CentOS7安装Mysql并配置远程访问
- 蓝桥杯十六进制转化为十进制
- 2星|《零工经济》:缺少对数据、事实、概括、分析,基本是流于表面的畅想...
- [环境]搭建Node+NPM+Grunt+Ruby开发环境
- python flask面试题_Flask面试题
- 最新Thinkphp免签码支付系统源码+安卓监控端/实测可用
- Java 枚举类写法
- r7000屏幕亮度linux,联想legion R7000笔记本linux使用体验
- HTML在手机端禁止放大缩小
- PyQt5快速开发与实战 5.2 容器:装载更多的控件
- Bloom Filter算法优化
- stm32mp157a-dk1 编译 Ubuntu 20.04固件
- E2类 MCR-WPT系统的搭建
- tryhackme圣诞挑战2021-Advent of Cyber 3-day2-越权漏洞,修改cookie
- 支持使用vlc在chrome等各种浏览器打开rtmp rtsp 谷歌浏览器Chrome播放rtsp视频流解决方案
- 保姆级Linux系统安装并使用libpng攻略
热门文章
- 浮动和清除(闭合)浮动
- 3、Fiddler 如何捕获Firefox的会话
- i7处理器好吗_笔记本电脑处理器是i5好还是i7好?为什么?
- 若依将ehcache改为redis缓存详细整合步骤
- [Ext JS6]视图模型和数据绑定
- linux查看消息队列的状态,linux – 如何知道某个时间点在消息队列中收到的消息数...
- sql查询三级菜单分类_SQL面试50题——思路解答与分类整理(中)窗口函数与子查询...
- Soul网关源码阅读(八)路由匹配初探
- 视图与表之间的异同点_灯芯绒面料印花与染色的异同点有哪些?做灯芯绒订单的了解一下...
- Java学习之FileInputStream与FileReader的区别