国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

深入淺出分析Python裝飾器用法

2020-02-16 01:58:31
字體:
來源:轉載
供稿:網友

本文實例講述了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@itadef 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 wordprint(say())print(say('Hello'))

示例二

最初代碼:

import threadingimport timeclass 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)  returnthreads = []for i in range(5):  t = threading.Thread(target=decorated_with_class)  threads.append(t)  t.setDaemon(True)  # 守護  t.start()

改進:進程鎖

import threadingimport timeclass 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)  returnthreads = []for i in range(5):  t = threading.Thread(target=decorated_with_class)  threads.append(t)  t.start()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 涡阳县| 三亚市| 庆元县| 库伦旗| 康平县| 绥阳县| 通河县| 青冈县| 佛教| 郴州市| 隆德县| 孝义市| 大悟县| 醴陵市| 简阳市| 万州区| 景洪市| 中卫市| 治县。| 松江区| 商洛市| 老河口市| 邹平县| 汽车| 眉山市| 巴青县| 平山县| 尼木县| 兴文县| 聊城市| 开化县| 河源市| 阿瓦提县| 江西省| 竹山县| 柳江县| 九江县| 望谟县| 嘉义县| 石门县| 巧家县|