在廖雪峰的官方网站学习装饰器章节时,初步理解类似与面向切面编程。记录一下自己的课后习题解法。

问题:
请编写一个decorator,能在函数调用的前后打印出'begin call'和'end call'的日志。写出一个@log的decorator,使它既支持:
@log
def f(): pass

又支持:
@log('execute')
def f(): pass

示例代码(个人练习,如有问题欢迎斧正):
# ! usr/bin/env python3
# -*- coding:utf-8 -*-import functoolsdef log(*text):def decorator(func):@functools.wraps(func)def warpper(*args,**kw):if(isinstance(text,(list,tuple))):print('Info:' , text)print('begin call %s():' % func.__name__)else:print('begin call %s():' % func.__name__)func(*args,**kw)print('-------','end call %s():' % func.__name__,'--------------')return warpperreturn decorator@log(['execute','beginOtherInfo'])
def now():print('test function')@log()
def now2():print('test function2')
now()
now2()

转载于:https://www.cnblogs.com/GYoungBean/p/6268662.html

python3练习-装饰器相关推荐

  1. Python3中装饰器@typing.overload的使用

    typing.py的源码在:https://github.com/python/cpython/blob/main/Lib/typing.py .此模块为类型提示(Type Hints)提供运行时支持 ...

  2. python3大器----装饰器,迭代器,生成器

    目录 一:闭包: 1:闭包的作用和定义: 2:闭包的形成条件: 3:闭包的经典案例: 4:闭包的原理: 5: 闭包中使用外部函数变量: 二:装饰器: 1:装饰器的定义和作用: 2:装饰器经典案例分析: ...

  3. Python3中装饰器介绍

          Python中的装饰器(decorator)是一个接受另一个函数作为参数的函数.装饰器通常会修改或增强它接受的函数并返回修改后的函数.这意味着当你调用一个装饰函数时,你会得到一个与基本定义 ...

  4. python3层装饰器_python三层装饰器python字符串,数值计算

    Python是一种面向对象的语言,但它不像C++一样把标准类都封装到库中,而是进行了进一步的封装,语言本身就集成一些类和函数,比如print,list,dict etc. 给编程带来很大的便捷 Pyt ...

  5. python3:装饰器的5大用法总结

    装饰器,顾名思义,就是给函数作装饰作用的,相当于只是给函数化了一个妆,并没有给他添加额外的代码,但是却增加了新功能,就如同我们在冬天很冷的情况下,想要变暖和(添加新功能),但是我们不是生活在武侠小说里 ...

  6. python中装饰器修复技术_python3之装饰器修复技术@wraps

    普通函数 def f(): """ 这是一个用来测试装饰器修复技术的函数 """ print("哈哈哈") if __n ...

  7. itext生成pdf paragraph 自动换行_reportlab高级制作多格式PDF和python的class和装饰器复习

    1 说明 1.1 reportlab高级制作多格式PDF:即包含文字.表格.柱状图. 1.2 复习python的class和装饰器的高级基础知识. 1.3 列表转换字符串.读取txt文件等python ...

  8. python3语法糖------装饰器

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- """装饰器""" ###### 第一波 ## ...

  9. python3 装饰器_Python3 装饰器

    一 什么是装饰器呢? 装饰器本质上来说就是函数,功能就是为其它函数添加附加功能. 原则: 不修改被修饰函数的源代码 不修改被修饰函数的调用方式 组织结构: 装饰器=高阶函数+函数嵌套+闭包 实例1(P ...

最新文章

  1. Juniper SRX IPsec *** base route CLI
  2. UML基础教程(内部使用教程) 非常不错的ppt!!强烈推荐
  3. linux中查找某一个字符串,Linux系统下,在文件中查找某个字符串
  4. Java内存模型、volatile、原子性、可见性、有序性、happens-before原则
  5. mysql常见数据库设计_常见数据库设计
  6. UML类图中会涉及到的一些概念、关系
  7. 大数据和人工智能将成消费金融主要驱动力
  8. 关于微信小程序中uView中通过packer选择器修改表单无法触发form组件的表单验证的问题
  9. LINUX查看一个进程用的内存准确数量
  10. HDU4825/5536 [01 字典树/简单字典树更新]
  11. (php毕业设计)基于php旅游信息网站管理系统源码
  12. 执行力强的人九个特点
  13. 还不会用 Python 提取 PDF 表格?三种类型数据,轻松转换成 Excel
  14. mysql数据库的单引号用法_数据库SQL语句单引号、双引号的用法
  15. CAD2018下载AutoCAD2018下载安装教程附软件下载
  16. 保利威视云直播的python API
  17. eli和字符串(尺取算法)牛客网2020寒假训练营1
  18. 将视频文件旋转90°的方法
  19. ubuntu系统的备份和还原
  20. 第二章:1、复合函数求导

热门文章

  1. Tensorflow Day18 Convolutional Autoencoder
  2. RNN-LSTM循环神经网络-03Tensorflow进阶实现
  3. Android5.0源码分析—— Zygote进程分析
  4. RSA非对称加密算法之公钥和私钥详细介绍
  5. android-6.0不支持FloatMath.sqrt(x * x + y * y)
  6. JZOJ 4919. 【NOIP2017提高组模拟12.10】神炎皇
  7. python列表切片得到的是列表还是字符串_python中列表的切片问题 python arry怎么取列切片...
  8. 不用光盘可破解电脑系统密码
  9. 2019年, image captioning论文汇总
  10. C++三大继承构造函数的执行顺序详解