‘@’引用已有的函数,对下面的函数进行修饰。引用函数必须放在修饰函数的上面,引用函数的返回值,返回给被修饰的函数

一个简单的栗子:

 1 def funA(fn):
 2     print('A')    # 输出A
 3     fn() # 执行传入的fn参数  输出B
 4     return 'fkit'  # 返回给funB
 5 '''
 6 下面装饰效果相当于:funA(funB),
 7 funB将会替换(装饰)成该语句的返回值;
 8 由于funA()函数返回fkit,因此funB就是fkit
 9 '''
10 @funA
11 def funB():
12     print('B')
13 print(funB) # 此时再运行funB函数输出的是fkit

这里funA是引用的函数,funB是被修饰的函数。@修饰符的功能就是把funB当做参数传递给funA,然后把funA的返回值返回到funB

这意味着程序要完成两步操作:

将 funB 作为 funA() 的参数,也就是上面代码中 @funA 相当于执行 funA(funB)。

将 funB 替换成上一步执行的结果,funA() 执行完成后返回 fkit,因此 funB 就不再是函数,而是被替换成一个字符串。

输出如下:

A
B
Fkit

当然,也可以返回一个函数,看下面这个栗子:

 1 def my_decorator(func):
 2     def wrapper():       # 暂时跳过这个函数
 3         '''decorator'''
 4         print('Decorated function...')
 5     print('123')
 6     return wrapper  # 把wrapper函数返回给test
 7
 8
 9 @my_decorator  # decorator(test())
10 def test():
11     """Testword"""
12     print('Test function')
13
14
15 test()
16 print("函数名:%s" % test.__name__)

输出如下:123Decorated function...函数名:wrapper

可以看出,最先输出了第五行的‘123’,然后是第四行的‘Decorated function...’,最后是第十六行的函数名,下面捋一下代码的执行顺序:

最先执行了第9行代码,开始运行被引用函数,被引用函数的返回值是里面的嵌套函数wrapper,暂时跳过这个嵌套函数,运行到第5行,此时输出‘123’;运行第六行把内嵌函数返回给test函数,此时@修饰符的作用就算是已经完成了,接下来,代码运行第15行,调用test函数,但此时并没有test里面的

'Test function',二是输出了wrapper里面的'Decorated function...',这就是把函数作为被引用函数返回值的效果,此时的test本质上已经不再是test了,二是被引用函数的返回值wrapper函数,所以输出内容是wrapper函数里面的,最后,我们输出函数名验证一下。

这就是@修饰符的作用了,还不会飞的小菜鸡,文章有错误欢迎大佬随时指正。-----------------------------------------努力,不只是一种习惯,更是一种品质。

转载于:https://www.cnblogs.com/liangxiyang/p/11200476.html

python的@修饰符相关推荐

  1. python函数修饰符@的使用

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

  2. python中@修饰符用法

    @修饰符  '@'符号用作函数修饰符是python2.4新增加的功能,修饰符必须出现在函数定义前一行,不允许和函数定义在同一行.也就是说@A def f(): 是非法的. 只可以在模块或类定义层内对函 ...

  3. python正则表达式修饰符_python正则表达式,看完这篇文章就够了...

    今天讲什么? 今天以为大学同学微信聊,说最近在看我的公众号,她是国企汽车制造业的,但也要用python进行数据分析...之前看了往期的python字符串操作内容,里面说到了正则表达式,想学习一下... ...

  4. python 权限修饰符

    阿里云大学人工智能学前小测验-Python测试 10.Python权限修饰正确的是 A. 标识符开头无下划线,该变量或方法为公有权限 B. 标识符开头双下划线,该变量或方法为私有权限 C. 标识符开头 ...

  5. 有一个fuck叫做wfg,还是大写---python的@修饰符解析

    引用:http://coolshell.cn/articles/11265.html @-Decorator的本质 线上代码: def fuck(fn):print "fuck %s!&qu ...

  6. python中函数修饰符_python中的函数修饰符

    首先,什么是函数修饰符?函数修饰符就是对原有函数做一层包装.比如有以下两个函数: def func1(): print 'I am function func1' def func2(): print ...

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

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

  8. Python修饰符--函数修饰符 “@”

    Python函数修饰符,"@",与其说是修饰函数倒不如说是引用.调用它修饰的函数. 举个栗子,下面的一段代码,里面两个函数,没有被调用,也会有输出结果: def test(f):p ...

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

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

最新文章

  1. oracle电子商务套件视频,Oracle电子商务套件培训 Oracle EBS R12 制造模块培训视频教程 Oracle管理套件教程...
  2. linux yum list包数量少,Linux基础知识之YUM包管理工具
  3. java并发编程之美-阅读记录4
  4. python控制台输出到文件_Python print 立即打印内容到重定向的文件
  5. 【Java数据库】使用JDBC操作MySQL数据库、Batch批处理 、事务的概念
  6. 动态规划——莱文斯坦距离
  7. DPDK ring库:环形缓冲区的解剖
  8. (零)VCS学习笔记
  9. 探寻 JavaScript 逻辑运算符(与、或)的真谛
  10. Eclipse中的快捷键……希望朋友们能熟练使用
  11. linux yum 安装软件
  12. atitit。解决 No suitable Log constructor。。NoClassDefFoundError: org/apache/log4j/Category 找不到类的
  13. vue4 库模式打包_Steam“小模式”游戏库回归 界面轻快简洁可随时切换
  14. 微信开发工具调试窗口怎样查看netWork
  15. 华为 emui 刷机解锁及回锁教程
  16. python设置excel套打_你不一定知道这个用 Python 快速设置 Excel 表格边框的技巧
  17. 合格的程序员精通c语言吗,只精通一门C语言的人算不算程序员?
  18. 什么是外贸ERP系统?
  19. KubeSphere安装redis集群,全程超带劲
  20. 小记 百度地图 soso地图 经纬度偏移

热门文章

  1. XCode 项目配置说明
  2. 求高精度幂(java)
  3. 分享基于分布式Http长连接框架--设计模型
  4. 计算机能思考吗?图1专题6:“人脑是计算机吗?”
  5. 如何使用Autopano Video Pro进行全景视频拼接?
  6. AVFoundation和 GPUImage初探
  7. 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google
  8. adb通信协议分析以及实现(二):adb服务进程发现设备
  9. Vijos P1103 校门外的树【线段树,模拟】
  10. 21.正则表达式的基本语法