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

首頁 > 編程 > Python > 正文

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

2020-01-04 17:05:20
字體:
供稿:網(wǎng)友

本文實例講述了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()

 

希望本文所述對大家Python程序設計有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 泾阳县| 图木舒克市| 罗城| 冀州市| 灌云县| 湛江市| 新野县| 巴彦县| 古丈县| 苏尼特右旗| 农安县| 绥棱县| 唐海县| 金昌市| 织金县| 三穗县| 中西区| 册亨县| 巴彦县| 休宁县| 富宁县| 根河市| 西林县| 宝鸡市| 密云县| 灯塔市| 射阳县| 游戏| 隆林| 彭山县| 南充市| 鄂托克前旗| 威远县| 内丘县| 广水市| 健康| 双柏县| 贡觉县| 从江县| 灵山县| 大余县|