Python带参数的装饰器运行原理解析


Posted in Python onJune 09, 2020

关于装饰器的理解,特别像《盗梦空间》中的进入梦境和从梦境出来的过程,一层一层的深入梦境,然后又一层一层的返回,被带入梦境的是被装饰的函数,装饰器就是使人入梦的工具。

上代码:

from functools import wraps
def decorator_with_argument(argument=''):
  def outer(func):
    message = argument + func.__name__
    @wraps(func)
    def inner(*args, **kwargs):
      print(message)
      print('This is inner function running')
      return func(*args, **kwargs)
    return inner
  return outer

以上是装饰器的部分。

接下来,是带参数的装饰器:

@decorator_with_argument("Decorator's argument + ")
def pfunc(arg='default'):
  print('This is pfunc running')
  print(f'This " {arg} " is from pfunc argument')

最后,函数的运行:

pfunc("pfunc's argument")

函数本身也是带参数的。输出结果如下:

Decorator's argument + pfunc
This is inner function running
This is pfunc running
This " pfunc's argument " is from pfunc argument

Process finished with exit code 0

下图是关于梦境的具体图示:

Python带参数的装饰器运行原理解析

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

Python 相关文章推荐
Python找出list中最常出现元素的方法
Jun 14 Python
python dict.get()和dict['key']的区别详解
Jun 30 Python
python常用函数详解
Sep 13 Python
python爬虫框架talonspider简单介绍
Jun 09 Python
Django REST为文件属性输出完整URL的方法
Dec 18 Python
Python+matplotlib实现填充螺旋实例
Jan 15 Python
transform python环境快速配置方法
Sep 27 Python
纯用NumPy实现神经网络的示例代码
Oct 24 Python
Python PyCharm如何进行断点调试
Jul 05 Python
Python爬虫抓取技术的一些经验
Jul 12 Python
pymysql 开启调试模式的实现
Sep 24 Python
浅谈在django中使用redirect重定向数据传输的问题
Mar 13 Python
Python sorted对list和dict排序
Jun 09 #Python
python初步实现word2vec操作
Jun 09 #Python
Python生成随机验证码代码实例解析
Jun 09 #Python
在python下实现word2vec词向量训练与加载实例
Jun 09 #Python
Python实现寻找回文数字过程解析
Jun 09 #Python
pycharm 关掉syntax检查操作
Jun 09 #Python
Python控制台实现交互式环境执行
Jun 09 #Python
You might like
php如何执行非缓冲查询API
2016/07/22 PHP
php源码的使用方法讲解
2019/09/26 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
IE浏览器PNG图片透明效果代码
2008/09/02 Javascript
brook javascript框架介绍
2011/10/10 Javascript
js判断选择时间不能小于当前时间的示例代码
2013/09/24 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
2015/06/19 Javascript
jquery实现动画菜单的左右滚动、渐变及图形背景滚动等效果
2015/08/25 Javascript
js精美的幻灯片画集特效代码分享
2015/08/29 Javascript
JS图片放大效果简单实现代码
2016/09/08 Javascript
IE8兼容Jquery.validate.js的问题
2016/12/01 Javascript
React数据传递之组件内部通信的方法
2017/12/31 Javascript
vue+axios+promise实际开发用法详解
2018/10/15 Javascript
微信小程序自定义组件实现环形进度条
2020/11/17 Javascript
JS开发 富文本编辑器TinyMCE详解
2019/07/19 Javascript
Javascript新手入门之字符串拼接与变量的应用
2020/12/03 Javascript
[08:44]和酒神一起战斗 DOTA2教你做大人
2014/03/27 DOTA
利用Python的Twisted框架实现webshell密码扫描器的教程
2015/04/16 Python
Python+django实现文件上传
2016/01/17 Python
Python使用MD5加密算法对字符串进行加密操作示例
2018/03/30 Python
Pycharm以root权限运行脚本的方法
2019/01/19 Python
对python函数签名的方法详解
2019/01/22 Python
python切片(获取一个子列表(数组))详解
2019/08/09 Python
Python如何实现小程序 无限求和平均
2020/02/18 Python
python实现PCA降维的示例详解
2020/02/24 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
2020/03/23 Python
Django ORM 查询表中某列字段值的方法
2020/04/30 Python
墨西哥运动服饰和鞋网上商店:Netshoes墨西哥
2016/07/28 全球购物
Myprotein加拿大官网:欧洲第一的运动营养品牌
2018/01/06 全球购物
2014年党务公开实施方案
2014/02/27 职场文书
2014年幼儿园个人工作总结
2014/11/10 职场文书
情人节活动总结范文
2015/02/05 职场文书
Python通过m3u8文件下载合并ts视频的操作
2021/04/16 Python
Pytorch中的数据集划分&正则化方法
2021/05/27 Python
Java 在生活中的 10 大应用
2021/11/02 Java/Android
MySQL笔记 —SQL运算符
2022/01/18 MySQL