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

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学习基地,看前辈们是如何学习的!从基础的python脚本、爬虫、django、数据挖掘等编程技术,还有整理零基础到项目实战的资料,送给每一位爱学习python的小伙伴!每天都有老前辈定时讲解Python技术,分享一些学习的方法和需要留意的小细节,点击加入我们的 python学习者聚集地

python进步学习者

发布了39 篇原创文章 · 获赞 38 · 访问量 5万+

私信

关注

标签:test1,...,test2,log,python,修饰符,print,解析,def

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

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

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

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

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

  3. python字典实现原理-哈希函数-解决哈希冲突方法

    python字典实现原理-哈希函数-解决哈希冲突方法 参考文章: (1)python字典实现原理-哈希函数-解决哈希冲突方法 (2)https://www.cnblogs.com/guyannanfe ...

  4. python一个函数调用另一个函数中的变量_在Python 中同一个类两个函数间变量的调用方法...

    在Python 中同一个类两个函数间变量的调用方法 更新时间:2019年01月31日 15:44:54 作者:wxy_summer 今天小编就为大家分享一篇在Python 中同一个类两个函数间变量的调 ...

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

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

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

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

  7. Python修饰符 (一)—— 函数修饰符 “@”

    今天被问到Python函数修饰符,顺手写写. Python函数修饰符,"@",与其说是修饰函数倒不如说是引用.调用它修饰的函数. 举个栗子,下面的一段代码,里面两个函数,没有被调用 ...

  8. python中注释的作用_Python函数添加注释的好处

    前面的教程中,我们已经学习了 Python 中的注释方式,单行注释以#开头,进行多行注释时通常用三个单引号'''将注释部分包裹起来. 在函数的定义中,常利用多行注释给函数写文档,称为函数文档.为什么要 ...

  9. python中sort返回值_Python函数你真的都学会了吗?来看看这篇Python高阶函数!

    二.高阶函数 高级函数, 英文叫 Higher-order Function. 那么什么是高阶函数呢? 在说明什么是=高阶函数之前, 我们需要对函数再做进一步的理解! 2.1 函数的本质 函数的本质是 ...

最新文章

  1. 程序员成长的本质,就是一步步靠近商业
  2. linux 编译文件mm,Linux编译C++文件,说没有找到头文件,怎么啊?新手,不太会用...
  3. requestmapping配置页面后_@RequestMapping接口及页面乱码问题
  4. 营业执照在线一键生成_如何在线制作证件照?证件照一键生成的方法
  5. php 图片不让下载,php让图片可以下载的方法
  6. 一、JpaRepository 命名规范(摘)
  7. 谋哥:这个时代没有比程序员更适合创业
  8. 三极管共射放大电路调试
  9. 爬去微信小程序服务器代码,微信小程序反编译及源码抓取(2021最新)
  10. oracle条件查询数量统计,Oracle多条件的统计查询(case when)
  11. jzyzoj 1216 poj虫洞 3259 Bellman_Ford模板
  12. 密室寻宝(find)
  13. Windows WiFi 热点共享 debug Android
  14. GPU大百科全书 前传 看图形与装修的关系
  15. OKR实施方法——关于思路和流程的思考
  16. 【找不到SQL Server ODBC 驱动程序的安装例程】的解决
  17. 学好这些模块电路,看懂电子电路图需要这几步
  18. 江郎才尽者,小刀也,故。。。
  19. 《软件研制任务书》的正文格式
  20. 无线网服务器有辐射吗,WiFi对孕妇有辐射吗

热门文章

  1. luogu3413 萌数
  2. java(Hello World) 常量 变量和注意事项
  3. BZOJ2243: [SDOI2011]染色
  4. js 日期比较大小,js判断日期是否在区间内,js判断时间段是否在另外一个时间段内...
  5. 實驗項目wordcount
  6. php 生成饼状图,折线图,条形图 通用类
  7. 谈卢梭的《爱弥尔》及其对于教育的现实意义
  8. 精化集ASP.NET AJAX与ASP.NET MVC分类第二轮筛选结果
  9. idea卸载不干净怎么办_家里拖地老是不干净怎么办,来跟我学!
  10. 乐山市计算机学校谭娟,乐山市计算机学校重视新闻写作培训