国产探花免费观看_亚洲丰满少妇自慰呻吟_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()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 自贡市| 静安区| 壤塘县| 八宿县| 定州市| 酒泉市| 吉安县| 沛县| 霞浦县| 应用必备| 尉犁县| 宁津县| 永昌县| 虎林市| 阜南县| 盐城市| 台南县| 社会| 福州市| 苗栗县| 达孜县| 手游| 招远市| 濮阳市| 木兰县| 盘山县| 礼泉县| 临武县| 体育| 图片| 林芝县| 任丘市| 伊金霍洛旗| 唐河县| 中西区| 潼南县| 苏尼特右旗| 齐齐哈尔市| 遂昌县| 东港市| 朔州市|