Python装饰器的两种使用心得
作者:糖烤栗子& 发布时间:2023-03-17 17:03:23
标签:Python,装饰器,使用
装饰器的基础使用(装饰带参函数)
def decorator(func):
def inner(info):
print('inner')
func(info)
return inner
@decorator
def show_info(info):
print(info)
show_info('hello')
防止装饰器改变装饰函数名称
装饰器在装饰函数的时候由于返回的是inner的函数地址,所以函数的名称也会改变 show_info.__name__会变成inner,防止这种现象可以使用functools
import functools
def decorator(func):
@functools.wraps(func)
def inner(info):
print('inner')
func(info)
return inner
@decorator
def show_info(info):
print(info)
show_info('hello')
这样写就不会改变被装饰函数的名称
装饰器动态注册函数
此方法在Flask框架的app.Route()的源码中体现
class Commands(object):
def __init__(self):
self.cmd = {}
def regist_cmd(self, name: str) -> None:
def decorator(func):
self.cmd[name] = func
print('func:',func)
return func
return decorator
commands = Commands()
# 使得s1的值指向show_h的函数地址
@commands.regist_cmd('s1')
def show_h():
print('show_h')
# 使得s2的值指向show_e的函数地址
@commands.regist_cmd('s2')
def show_e():
print('show_e')
func = commands.cmd['s1']
func()
个人心得
在阅读装饰器代码时可以使用加(func_name)的方式
以为例
@commands.regist_cmd('s2')
def show_e():
print('show_e')
即 show_e = commands.regist_cmd('s2')(show_e)
来源:https://www.cnblogs.com/grocerystore/p/15320144.html
0
投稿
猜你喜欢
- 安装部分所需文件在最下方提供STEP1双击mysql-installer-web-community-8.0.18.0.msi进行按钮如果出
- 使用python将图片改为灰度图或黑白图有三种方式,分别是是使用cv2库和PIL库来实现,详细过程如下所示。1. 使用cv2库将图片改为灰度
- 一、准备工作1、确保jdk已安装成功,并且jdk版本选用1.7以上版本2、准备一台新的主机mysql_mycat放到master的前面做代理
- 1、什么是UUIDUUID简介通用唯一识别码(英语:Universally Unique Identifier,简称UUID)是一种软件建构
- Python自动化办公之删除重复的视频文件获取所有文件路径import osimport filecmpfile_list=[]new_li
- 前言相信大家在日常的web开发中,作为前端经常会遇到处理图片拉伸问题的情况。例如banner、图文列表、头像等所有和用户或客户自主操作图片上
- 使用JS实现在图片上显示左右箭头的翻页代码,预览效果网址:http://www.keleyi.com/keleyi/phtml/picnex
- window运行:regedit然后找到HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Contro
- 天气查询python小程序第0步:导入工具库第一步:生成查询天气的url链接第二步:访问url链接,解析服务器返回的json数据,变成pyt
- 解决方式一:import matplotlib#1. 获取matplotlibrc文件所在路径matplotlib.matplotlib_f
- 本文实例为大家分享了python实现俄罗斯方块的具体代码,供大家参考,具体内容如下# teris.py# A module for game
- pytorch 预训练模型读取修改相关参数的填坑修改部分层,仍然调用之前的模型参数。resnet = resnet50(pretrained
- #mode operand create truncate#read < #write >&nbs
- 1.setting--version control--subversion,按照图中红色字体填入对应信息2.配置中途遇到没找到svn.ex
- 原理:自定义javascript中的oncontextmenu事件,然后使用div层模拟菜单。知道了这个原理结合美工相信你可以做出很漂亮的自
- 这篇文章主要介绍了python numpy数组复制使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 为了方便的实现记录数据、修改数据没有精力去做一个完整的系统去管理数据。因此,在python的控制台直接实现一个简易的数据管理系统,包括数据的
- 就在前几天还是二十多度的舒适温度,今天一下子就变成了个位数,小编已经感受到冬天寒风的无情了。之前对获取天气都是数据上的搜集,做成了一个数据表
- Javascript脚本获取form和input内容的方法随着js的发展,许多的网页数据处理完全可以由js脚本解决,而不需要发送到服务器这里
- 论文:Interactive Image Warping(1993年Andreas Gustafsson)算法思路:假设当前点为(x,y),