使用装饰器工厂函数实现不同的装饰器行为

想要一个装饰器对不同的函数表现出不同的行为,可以使用装饰器工厂函数,例如:

def decorate(type):def calc(func):if type == 'adam':print('use adam')elif type == 'rmsprop':print('use rmsprop')else:print('None')return funcreturn calc

在这里函数decorate作为一个装饰器工厂函数,它依靠不同的传入参数,实现不同的装饰功能,calc是真正的装饰器,由decorate调用。可以这么使用:

@decorate('adam')
def use_adam_function():pass@decorate('rmsprop')
def use_rms_prop_function():pass@decorate('None')
def use_None():pass

工厂函数decorate接受字符串输入,在calc中对字符串进行检查,从而选择不同的装饰效果,而在函数本体中都是使用pass跳过,运行结果如下:

use adam
use rmsprop
None

《流畅的python》学习日志----装饰器工厂函数相关推荐

  1. Python学习之==装饰器

    在Python中,装饰器和迭代器.生成器都是非常重要的高级函数. 在讲装饰器之前,我们先要学习以下三个内容: 一.函数的作用域 1.作用域介绍 Python中的作用域分为四种情况: L:local,局 ...

  2. Python学习日志10 - 高阶函数和高级应用

    Python学习日志 RBHGO的主页欢迎关注 温馨提示:创作不易,如有转载,注明出处,感谢配合~ 目录 文章目录 Python学习日志 目录 前言 进入正题 Python学习日志10课 - 高阶函数 ...

  3. python学习之装饰器---转

    1. 装饰器入门 1.1. 需求是怎么来的?装饰器的定义很是抽象,我们来看一个小例子. def foo():     print 'in foo()'   foo() 这是一个很无聊的函数没错.但是突 ...

  4. Python学习:装饰器使用,timeit()记录程序运行在哪里,耗时多少

    使用装饰器记录函数体运行时间: import time import wraptclass Timing:timings = {}enabled = Falsedef __init__(self, e ...

  5. Python学习,装饰器,元类

    # 函数也是对象,可以把函数赋值给变量,使用变量调用函数def func(x):return x+1plus_one = funcprint(plus_one(1)) #%% # 装饰器的思想是装饰函 ...

  6. Python: 使用装饰器“@”取得函数执行时间

    class A(): Python: 使用装饰器"@"取得函数执行时间 - oldJ的学习笔记 - 博客频道 - CSDN.NET Python: 使用装饰器"@&quo ...

  7. Noah的学习笔记之Python篇:装饰器

    Noah的学习笔记之Python篇: 1.装饰器 2.函数"可变长参数" 3.命令行解析 注:本文全原创,作者:Noah Zhang  (http://www.cnblogs.co ...

  8. 编程学习笔记之python深入之装饰器案例及说明文档[图]

    编程学习笔记之python深入之装饰器案例及说明文档[图] 装饰器即在不对一个函数体进行任何修改,以及不改变整体的原本意思的情况下,增加函数功能的新函数,因为这个新函数对旧函数进行了装饰,所以称为装饰 ...

  9. Python 自制简单实用的日志装饰器

    在写代码的时候,往往会漏掉日志这个关键因素,导致功能在使用的时候出错却无法溯源. 其实,只需要写一个非常简单的日志装饰器,我们就能大大提升排查问题的效率. 1.简陋版装饰器 写一个装饰器非常简单,因为 ...

最新文章

  1. EDM营销中HTML邮件设计的技巧
  2. java redis设置过期时间_Redis的一些核心原理
  3. Nginx环境下PHP flush失效的解决方法
  4. TAdoquery的Filter
  5. ASP.NET服务器控件开发(2)--继承WebControl类
  6. 【最短路径Floyd算法详解推导过程】看完这篇,你还能不懂Floyd算法?还不会?...
  7. C语言一看就能上手的干货!你确定你不来看吗?
  8. 2021年Z世代“潮力量”洞察报告
  9. ReedShepp与Dubins path的matlab实现
  10. Unix系统编程()信号处理器简介
  11. 如何看待B站疑似源码泄漏的问题?
  12. 英文数字字母听力模拟的简单实现
  13. 23种设计模式——适配器模式
  14. Criteo数据集预处理
  15. 洛阳理工学院计算机类分数线,2017洛阳理工学院录取分数线
  16. 银保监机构保险许可证数据(2007-2022年)
  17. Windows 8.1下释放磁盘空间的指南
  18. 程序员爆改《GTA OL》代码后加载速度快了 70%,R 星采纳并奖励 1 万美元
  19. 【SQL】Mysql5.7版本实现row_number分组排序功能
  20. 5G套餐降价,但价格真的是阻拦消费者升级5G的因素吗?

热门文章

  1. BZOJ 1552/1506 [Cerc2007]robotic sort
  2. 将RGB值转换为灰度值的简单算法(转)
  3. asp.net中上传文件实例
  4. PCA降维算法原理及代码实现(python和matlab)
  5. matlab 中imagesc的用法
  6. 使用echo输出一绝对路径,使用egrep取出其基名
  7. Python学习笔记:常用内建模块6 (urllib)
  8. ustc小道消息20220112
  9. 云炬Android开发笔记 11主界面-商品分类开发(多布局Section RecyclerView)
  10. extundelete安装_Linux数据安全工具:数据恢复软件extundelete概述