本文实例讲述了Python装饰器用法。分享给大家供大家参考,具体如下:

用类作为装饰器
示例一
最初代码:
class bol(object):
def __init__(self, func):
self.func = func
def __call__(self):
return "<b>{}</b>".format(self.func())
class ita(object):
def __init__(self, func):
self.func = func
def __call__(self):
return "<i>{}</i>".format(self.func())
@bol
@ita
def sayhi():
return 'hi'
改进一:
class sty(object):
def __init__(self, tag):
self.tag = tag
def __call__(self, f):
def wraper():
return "<{tag}>{res}</{tag}>".format(res=f(), tag=self.tag)
return wraper
@sty('b')
@sty('i')
def sayhi():
return 'hi'
改进二:
class sty(object):
def __init__(self, *tags):
self.tags = tags
def __call__(self, f):
def wraper():
n = len(self.tags)
return "{0}{1}{2}".format(('<{}>'*n).format(*self.tags), f(), ('</{}>'*n).format(*reversed(self.tags)))
return wraper
@sty('b', 'i')
def sayhi():
return 'hi'
print(sayhi())
改进三:
class sty(object):
def __init__(self, *tags):
self.tags = tags
def __call__(self, f):
def wraper(*args, **kwargs):
n = len(self.tags)
return "{0}{1}{2}".format(('<{}>'*n).format(*self.tags), f(*args, **kwargs), ('</{}>'*n).format(*reversed(self.tags)))
return wraper
@sty('b', 'i')
def say(word='Hi'):
return word
print(say())
print(say('Hello'))
示例二
最初代码:
import threading
import time
class DecoratorClass(object):
def __init__(self):
self.thread = None
def __call__(self, func, *args, **kwargs):
def wrapped_func(*args, **kwargs):
curr_thread = threading.currentThread().getName()
self.thread = curr_thread
print('\nthread name before running func:', self.thread)
ret_val = func()
print('\nthread name after running func:', self.thread)
return ret_val
return wrapped_func
@DecoratorClass()
def decorated_with_class():
print('running decorated w class')
time.sleep(1)
return
threads = []
for i in range(5):
t = threading.Thread(target=decorated_with_class)
threads.append(t)
t.setDaemon(True) # 守护
t.start()
改进:进程锁
import threading
import time
class DecoratorClass(object):
def __init__(self):
self.thread = None
self.lock = threading.Lock()
def __call__(self, func, *args, **kwargs):
def wrapped_func(*args, **kwargs):
self.lock.acquire()
curr_thread = threading.currentThread().getName()
self.thread = curr_thread
print('thread name before running func:', self.thread)
ret_val = func()
print('\nthread name after running func:', self.thread)
self.lock.release()
return ret_val
return wrapped_func
@DecoratorClass()
def decorated_with_class():
print('Let me sleep 1 second...')
time.sleep(1)
return
threads = []
for i in range(5):
t = threading.Thread(target=decorated_with_class)
threads.append(t)
t.start()
更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
# Python
# 装饰器
# Python 装饰器使用详解
# 老生常谈Python之装饰器、迭代器和生成器
# Python中装饰器兼容加括号和不加括号的写法详解
# Python的装饰器使用详解
# 带你了解python装饰器
# 详解Python中最难理解的点-装饰器
# 深入理解Python中装饰器的用法
# 详解 Python中LEGB和闭包及装饰器
# 进阶
# 最初
# 相关内容
# 数据结构
# 给大家
# 更多关于
# 所述
# 程序设计
# 使用技巧
# 操作技巧
# 编程技巧
# 讲述了
# return
# lt
# gt
# def
# func
# format
# wraper
# res
相关文章:
如何通过VPS搭建网站快速盈利?
独立制作一个网站多少钱,建立网站需要花多少钱?
PHP 500报错的快速解决方法
已有域名如何免费搭建网站?
Bpmn 2.0的XML文件怎么画流程图
如何用花生壳三步快速搭建专属网站?
网站好制作吗知乎,网站开发好学吗?有什么技巧?
如何在IIS7中新建站点?详细步骤解析
如何快速搭建高效WAP手机网站吸引移动用户?
如何用5美元大硬盘VPS安全高效搭建个人网站?
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
非常酷的网站设计制作软件,酷培ai教育官方网站?
浅析上传头像示例及其注意事项
C#如何在一个XML文件中查找并替换文本内容
,怎么用自己头像做动态表情包?
如何通过VPS建站实现广告与增值服务盈利?
建站之星安装提示数据库无法连接如何解决?
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
在线制作视频网站免费,都有哪些好的动漫网站?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
如何实现建站之星域名转发设置?
Android自定义控件实现温度旋转按钮效果
c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】
如何通过虚拟机搭建网站?详细步骤解析
建站之星安全性能如何?防护体系能否抵御黑客入侵?
移民网站制作流程,怎么看加拿大移民官网?
5种Android数据存储方式汇总
如何在建站之星网店版论坛获取技术支持?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
股票网站制作软件,网上股票怎么开户?
Python文件管理规范_工程实践说明【指导】
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
制作网站的软件免费下载,免费制作app哪个平台好?
红河网站制作公司,红河事业单位身份证如何上传?
专业网站建设制作报价,网页设计制作要考什么证?
如何用PHP工具快速搭建高效网站?
Swift中switch语句区间和元组模式匹配
建站之星备案流程有哪些注意事项?
盐城做公司网站,江苏电子版退休证办理流程?
婚礼视频制作网站,学习*后期制作的网站有哪些?
,想在网上投简历,哪几个网站比较好?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
建站主机与服务器功能差异如何区分?
如何通过主机屋免费建站教程十分钟搭建网站?
已有域名如何快速搭建专属网站?
怀化网站制作公司,怀化新生儿上户网上办理流程?
建站之星3.0如何解决常见操作问题?
香港服务器租用每月最低只需15元?
*请认真填写需求信息,我们会在24小时内与您取得联系。