Python装饰器的两种使用心得
作者:糖烤栗子& 时间:2023-03-17 17:03:23
装饰器的基础使用(装饰带参函数)
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
标签:Python,装饰器,使用
0
投稿
猜你喜欢
MySQL5.7更改密码时出现ERROR 1054 (42S22)的解决方法
2024-01-23 12:12:47
Python 不同对象比较大小示例探讨
2023-06-11 01:13:32
浅析python打包工具distutils、setuptools
2021-03-30 14:45:14
一篇文章弄懂Python中的内建函数
2023-01-18 00:36:36
Python3中map()、reduce()、filter()的用法详解
2024-01-03 01:27:23
Go语言实战学习之流程控制详解
2024-05-09 14:57:06
Pandas计算元素的数量和频率的方法(出现的次数)
2023-01-02 03:44:58
从两个方面讲解SQL Server口令的脆弱性
2009-01-08 13:40:00
PyTorch搭建LSTM实现多变量时序负荷预测
2023-10-29 10:48:50
对pytorch网络层结构的数组化详解
2023-09-02 12:10:09
python实现的各种排序算法代码
2022-06-17 05:41:19
python调用外部程序的实操步骤
2021-09-11 10:39:37
python实现复制整个目录的方法
2023-04-08 18:14:47
oracle 更改数据库名的方法
2009-10-24 18:20:00
详解Pytorch如何利用yaml定义卷积网络
2023-02-16 10:46:01
css+JavaScript实现PDF、ZIP、DOC链接的标注
2007-05-11 17:03:00
使用Django实现商城验证码模块的方法
2023-11-04 04:46:23
关于python简单的爬虫操作(requests和etree)
2022-01-08 02:17:27
Python打印不合法的文件名
2021-06-29 03:40:19
Pycharm远程连接服务器并运行与调试
2021-05-29 04:38:51