全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

深入浅出分析Python装饰器用法

本文实例讲述了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小时内与您取得联系。