全网整合营销服务商

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

免费咨询热线: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快速搭建个人网站?  如何通过虚拟主机快速完成网站搭建?  如何在万网开始建站?分步指南解析  建站VPS推荐:2025年高性能服务器配置指南  济南专业网站制作公司,济南信息工程学校怎么样?  如何正确选择百度移动适配建站域名?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  c++ stringstream用法详解_c++字符串与数字转换利器  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  建站之星在线版空间:自助建站+智能模板一键生成方案  如何在万网自助建站中设置域名及备案?  如何零基础在云服务器搭建WordPress站点?  哈尔滨网站建设策划,哈尔滨电工证查询网站?  如何在局域网内绑定自建网站域名?  如何用VPS主机快速搭建个人网站?  ,制作一个手机app网站要多少钱?  教程网站设计制作软件,怎么创建自己的一个网站?  如何通过老薛主机一键快速建站?  建站主机是否等同于虚拟主机?  如何有效防御Web建站篡改攻击?  建站主机选购指南:核心配置优化与品牌推荐方案  如何在Windows环境下新建FTP站点并设置权限?  建站之星后台密码遗忘如何找回?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  制作营销网站公司,淘特是干什么用的?  如何在万网主机上快速搭建网站?  建站之星图片链接生成指南:自助建站与智能设计教程  盐城做公司网站,江苏电子版退休证办理流程?  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?  ppt制作免费网站有哪些,ppt模板免费下载网站?  如何快速搭建安全的FTP站点?  微课制作网站有哪些,微课网怎么进?  linux top下的 minerd 木马清除方法  C#怎么创建控制台应用 C# Console App项目创建方法  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  家庭服务器如何搭建个人网站?  已有域名如何快速搭建专属网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。