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实现下载网易云音乐的高清MV
Mar 16 Python
Python监控主机是否存活并以邮件报警
Sep 22 Python
python实现汉诺塔递归算法经典案例
Mar 01 Python
利用Python爬虫给孩子起个好名字
Feb 14 Python
python spyder中读取txt为图片的方法
Apr 27 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
May 26 Python
python爬取内容存入Excel实例
Feb 20 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
Jun 18 Python
python解析xml文件方式(解析、更新、写入)
Mar 05 Python
Python3批量创建Crowd用户并分配组
May 20 Python
Python新手学习标准库模块命名
May 29 Python
matplotlib之pyplot模块之标题(title()和suptitle())
Feb 22 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
加速XP搜索功能堪比vista
2007/03/22 PHP
使用array mutisort 实现按某字段对数据排序
2013/06/18 PHP
php后台如何避免用户直接进入方法实例
2013/10/15 PHP
PHP未登录自动跳转到登录页面
2016/12/21 PHP
PHP数据库操作二:memcache用法分析
2017/08/16 PHP
PHP多维数组排序array详解
2017/11/21 PHP
tp5.0框架隐藏index.php入口文件及模块和控制器的方法分析
2020/02/11 PHP
encode脚本和normal脚本混用的问题与解决方法
2007/03/08 Javascript
jquery ajax 登录验证实现代码
2009/09/23 Javascript
js TextArea的选中区域处理
2010/12/28 Javascript
jQuery实现的一个自定义Placeholder属性插件
2014/08/11 Javascript
js实现点击添加一个input节点
2014/12/05 Javascript
Jquery 整理元素选取、常用方法一览表
2016/11/26 Javascript
用jQuery实现优酷首页轮播图
2017/01/09 Javascript
JS 在数组指定位置插入/删除数据的方法
2017/01/12 Javascript
JavaScript中防止微信浏览器被整体拖动的方法
2017/08/25 Javascript
javascript将list转换成树状结构的实例
2017/09/08 Javascript
vue实现计算器功能
2020/02/22 Javascript
vue实现列表滚动的过渡动画
2020/06/29 Javascript
jQuery实现简单弹幕制作
2020/12/10 jQuery
使用Python中的greenlet包实现并发编程的入门教程
2015/04/16 Python
答题辅助python代码实现
2018/01/16 Python
PythonPC客户端自动化实现原理(pywinauto)
2020/05/28 Python
python实现快速文件格式批量转换的方法
2020/10/16 Python
python boto和boto3操作bucket的示例
2020/10/30 Python
挪威手表购物网站:Klokker
2016/09/19 全球购物
世界汽车零件:World Car Parts
2019/09/04 全球购物
出生证明公证书
2014/04/09 职场文书
《大海那边》教学反思
2014/04/09 职场文书
团代会宣传工作方案
2014/05/08 职场文书
2014年国庆节演讲稿
2014/09/02 职场文书
校长四风对照检查材料
2014/09/27 职场文书
2015年高校保卫处工作总结
2015/07/23 职场文书
《鲸》教学反思
2016/02/23 职场文书
使用Redis实现点赞取消点赞的详细代码
2022/03/20 Redis
Redis配置外网可访问(redis远程连接不上)的方法
2022/12/24 Redis