python函数修饰符@的作用是为现有函数增加额外的功能,常用于插入日志、性能测试、事务处理等等。

创建函数修饰符的规则:

(1)修饰符是一个函数

(2)修饰符取被修饰函数为参数

(3)修饰符返回一个新函数

(4)修饰符维护被维护函数的签名

例子1:被修饰函数不带参数

def log(func):

def wrapper():

print('log开始 ...')

func()

print('log结束 ...')

return wrapper

@log

def test():

print('test ..')

test()

运行结果:

log开始 ...

test ..

log结束 ...

例子2:使用functools模块提供的修改函数属性的方法wraps

def log(func):

def wrapper():

print('log开始 ...')

func()

print('log结束 ...')

return wrapper

@log

def test1():

print('test1 ..')

def test2():

print('test2 ..')

print(test1.__name__)

print(test2.__name__)

运行结果:

wrapper

test2

可见test1的函数名称变了,如果某些代码用到就会出问题,可以使用functools模块提供的修改函数属性的方法wraps

from functools import wraps

def log(func):

@wraps(func)

def wrapper():

print('log开始 ...')

func()

print('log结束 ...')

return wrapper

@log

def test1():

print('test1 ..')

def test2():

print('test2 ..')

print(test1.__name__)

print(test2.__name__)

运行结果:

test1

test2

例子3:被修饰函数带参数

from functools import wraps

def log(func):

@wraps(func)

def wrapper(*args,**kwargs):

print('log开始 ...',func.__name__)

ret = func(*args,**kwargs)

print('log结束 ...')

return ret

return wrapper

@log

def test1(s):

print('test1 ..', s)

return s

@log

def test2(s1, s2):

print('test2 ..', s1, s2)

return s1 + s2

test1('a')

test2('a','bc')

运行结果:

log开始 ... test1

test1 .. a

log结束 ...

log开始 ... test2

test2 .. a bc

log结束 ...

例子4:修饰符带参数,需要比上面例子多一层包装

from functools import wraps

def log(arg):

def _log(func):

@wraps(func)

def wrapper(*args,**kwargs):

print('log开始 ...',func.__name__, arg)

ret = func(*args,**kwargs)

print('log结束 ...')

return ret

return wrapper

return _log

@log('module1')

def test1(s):

print('test1 ..', s)

return s

@log('module1')

def test2(s1, s2):

print('test2 ..', s1, s2)

return s1 + s2

test1('a')

test2('a','bc')

运行结果:

log开始 ... test1 module1

test1 .. a

log结束 ...

log开始 ... test2 module1

test2 .. a bc

log结束 ...

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

本文标题: python函数修饰符@的使用方法解析

本文地址: http://www.cppcns.com/jiaoben/python/271482.html

python @修饰符_python函数修饰符@的使用方法解析相关推荐

  1. python不定长参数怎么相加_python函数不定长参数使用方法解析

    这篇文章主要介绍了python函数不定长参数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 pathon中的函数可以使用不定长参数,可以 ...

  2. Python编程语言学习:python语言中快速查询python自带模块函数的用法及其属性方法、如何查询某个函数关键词的用法、输出一个类或者实例化对象的所有属性和方法名之详细攻略

    Python编程语言学习:python语言中快速查询python自带模块&函数的用法及其属性方法.如何查询某个函数&关键词的用法.输出一个类或者实例化对象的所有属性和方法名之详细攻略 ...

  3. python修饰符的理解_python函数修饰符@的使用方法解析

    这篇文章主要介绍了python函数修饰符@的使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python函数修饰符@的作用是为现有函数增 ...

  4. python修饰符号的使用_Python 函数修饰符(装饰器)的使用

    Python函数修饰符(装饰器)的使用 1.修饰符的来源 修饰符是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等. 修饰符是解决这类问题的绝佳设计,有了修 ...

  5. python修饰符作用_python函数修饰符@的使用

    python函数修饰符@的作用是为现有函数增加额外的功能,常用于插入日志.性能测试.事务处理等等. 创建函数修饰符的规则: (1)修饰符是一个函数 (2)修饰符取被修饰函数为参数 (3)修饰符返回一个 ...

  6. python 属性描述符_Python属性描述符(二)

    Python存取属性的方式特别不对等,通过实例读取属性时,通常返回的是实例中定义的属性,但如果实例未曾定义过该属性,就会获取类属性,而为实例的属性赋值时,通常会在实例中创建属性,而不会影响到类本身.这 ...

  7. python使用什么作为续行符_python的换行符是什么?

    python换行符是什么? python换行符是"\n". Windows换行符是'\r\n', Unix/Linux的换行符为'\n', Mac的换行符为'\r', 在pytho ...

  8. python函数调用位置_python函数定义,调用,传参,位置参数及关键字参数,返回值

    使用函数是真正开始编程的第一步,函数y=f(x)我们并不陌生,对x进行一顿操作得到一个值y.给不同的x,进行相同的操作,得到相应的y值. 程序层面函数是执行特定任务的一段代码,将一段代码定义成函数并为 ...

  9. Python教程:shift函数实现数据偏移的方法

    一.背景 当需要统计不同周期的变化情况时,需要使用数据偏移,在 Python 中使用 shift 函数实现. # 一阶差分 diff_num = num - num.shift(1) 二.实现 1.创 ...

最新文章

  1. 用NVIDIA-TensorRT构造深度神经网络
  2. 综述 | 现在是蛋白质组学数据共享和再分析的黄金时间?
  3. 20175333曹雅坤 实验二 Java面向对象程序设计
  4. 一文搞定Swing和Qt按钮和文本框的创建
  5. pytorch 音频分类_Pytorch中音频的神经风格转换
  6. mysql安装数据自定义_mysql数据库自定义怎么安装
  7. 三维旋转矩阵_第三讲:三维空间的刚体运动
  8. eclipse sdk manager无法更新
  9. 查看centos硬件配置
  10. TextSnake文本检测
  11. EXT Column Tree 的应用
  12. 树分解 宽度 如何分解 算法
  13. 下载频道用户使用指南!!
  14. 智慧园区中心服务平台建议方案
  15. 查找python array索引
  16. 右键新建选项里面没有新建文件夹--win10
  17. 《RFID原理及应用》期末复习总结(6)
  18. UG NX 三维PMI标注培训
  19. chrome模拟手机浏览器方法
  20. Thingsboard 项目说明,框架目录结构、技术及部署相关说明

热门文章

  1. NET Core 指令启动
  2. SQL语句大全-珍藏首选
  3. window.open使用中遇到的问题
  4. 719. Find K-th Smallest Pair Distance
  5. 动态规划几种状态剪裁比较
  6. PAT-Mars number
  7. process启动jar包判断成功_恒一广告助力2020年壹基金温暖包安康发放启动仪式成功举办...
  8. acctype mysql assoc_DedeCMS V5.3二次开发经验分享
  9. linux 4.9 内核 nptl,【linuxThread和NPTL】
  10. zookeeper的acl权限控制_Zookeeper 权限控制 ACL介绍