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
投稿
猜你喜欢
- 一、为表创建自增长自段有两种,一种是不同的表使用各自的Sequence,方法如下: 1、在Oracle sequence首先创建sequen
- 前言:对于 图片处理,在日常生活中我们常常能够看到。比如发个朋友圈之前,我们需要给自己的照片加个滤镜;在上传头像时候,需要对照片进行裁剪,这
- 因工作需要,要将存放在sql server数据库中的数据全部导入到mysql数据库中,在网上搜集相关资料,找到两种方法,现在分别谈谈对他们的
- CSS换肤技术一直是一个比较热门的话题,通过给HTML文档不同的CSS样式应用,实现完全不同或风格迥异的页面效果。这样的技术一直为大家所津津
- 译序:本文提到了一种很不错的实现跨浏览器圆角的解决方案,但是说的不够全面,前端观察最近将整理更多更全面的资源给大家,敬请期待。前一段时间,我
- 昨天十行代码实现文字识别,感觉怎样,是不是很爽今天咋们继续利用pillow和pytesseract来实现验证码的识别一、环境配置需要 pil
- CacheControl 属性设置是否可缓存由 ASP 生成的输出。默认地,代理服务器不会保持缓存副本。语法:response.CacheC
- Lightbox里面的一个函数,能把页面实际的高宽与浏览器可视面积的高宽保存在一个数组中..非常好用.什么是Lightbox?下载light
- 在我们的日常生活工作中,经常会遇到需要上传日志的场景,比如多台机器运行同一个程序,并且需要记录每台机器程序产生的日志,根据相关关键词告警,或
- 想到TDE(Transparent Data Encryption)。 TDE MSDN 说明: “透明数据加密”(TDE) 可对数据和日志
- #-*- coding: utf-8 -*-import win32api,win32gui, win32conimport osimpor
- 一般来说,我们判断 iframe 是否加载完成其实与 判断 JavaScript 文件是否加载完成 采用的方法很类似:var&nb
- 最近做了一个微信小程序的项目,关于后端给我传递日期的时候,我拿到的是一串数字如:createDate: 1552117531000 ,这是一
- 问题我们使用anoconda创建envs环境下的Tensorflow-gpu版的,但是当我们在Pycharm设置里的工程中安装Keras后,
- 这里是一个使用日期函数的例子。下面的查询选择了所有记录,其date_col的值是在最后30天以内: mysql>
- 内容摘要:下面是虚机维护中,经常碰到的一些ASP程序中的数据库调用的错误,现收集整理如下:1.不能打开注册表关键字(8007000e);2.
- 以下介绍用数据库实现简单计数器,功能实现统计网站每日访问,每周访问及总访问量的统计,使用js调用下面存为count.asp<%&nbs
- 1.执行cmd命令,不显示执行过程中弹出的黑框def run_cmd( cmd_str='', echo_print=1):
- 在asp.net 2.0中,很多情况下,使用gridview控件的话,甚至只需要拖拉控件,设置属性就可
- 如下所示:#coding utf-8a=0.001 #定义收敛步长xd=1 #定义寻找步