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

本文实例讲述了Python装饰器用法。分享给大家供大家参考,具体如下:

用类作为装饰器

示例一

最初代码:

class bol(object):

def __init__(self, func):

self.func = func

def __call__(self):

return "{}".format(self.func())

class ita(object):

def __init__(self, func):

self.func = func

def __call__(self):

return "{}".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 "{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程序设计有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488952.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python安装(原系统中已有python2)

由于项目中需要使用python3的特征,例如对中文的支持而不使用unicode,虽然一般装系统的时候会带有python2版本,但是还需要重新安装。这里给大家说下,不需要卸载python2,只需要重装python3即可。 下载python3.4&#xff…

总经费8.4亿的上海市脑科学重大专项进展如何?且看2019年度工作汇报会

来源:复旦大学类脑智能科学与技术研究院12月23至24日,上海市“脑与类脑智能基础转化应用研究”市级科技重大专项2019年度工作汇报会在复旦大学召开。中国工程院原常务副院长、中国科学院院士、浙江大学教授潘云鹤,中科院脑科学与智能技术卓越…

路径中有中文怎么解决_时序路径分析

时序路径分析是STA中非常重要的一个部分,任何一条时序路径都是由下面的三条路径构成的:源时钟路径(source clock path)数据路径(data path)目标时钟路径 (destination clock paths)当…

创建启动oracle快捷方式,GNOME3创建连接OracleFS管理软件启动快捷方式

OS:Debian Gnu/Linux 9Java:openjdk version "1.8.0_151"OpenJDK Runtime Environment (build 1.8.0_151-8u151-b12-1~deb9u1-b12)OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)方法:1、通过网页连接OraccleFS,并下载O…

bootstrap table 的简单Demo

暂时够用&#xff0c;不够用再补充 T_T script: <link rel"stylesheet" href"lib/bootstrap.min.css"> <!-- table css--> <link rel"stylesheet" href"lib/bootstrap-table.css"><script src"lib/jquery-1…

设计模式之——工厂模式

一、相关概念了解 首先知晓什么是工厂模式&#xff08;概念&#xff09;&#xff1f; ①实例化对象&#xff0c;用工厂方法代替new操作。②工厂模式包括工厂方法模式和抽象工厂模式。③抽象工厂模式是工厂方法模式的拓展。 其次明白工厂模式的意图 ①定义一个借口来创建对象&am…

吴恩达团队盘点2019AI大势:自动驾驶寒冬、NLP大跃进、Deepfake已成魔!

来源&#xff1a;新智元&#xff08;AI_era&#xff09;还有几天&#xff0c;我们就要和2019年说再见了。今年是AI从梦想变为现实的一年&#xff0c;从NLP到自动驾驶&#xff0c;从人脸识别到数据模拟&#xff0c;有哪些技术突破面世&#xff0c;又遭遇了哪些新的困难&#xff…

4怎么修边_亦木良品阻燃板怎么样

亦木良品阻燃板怎么样防火板_橱柜资料选择很重要美观耐用才是重点。橱柜资料1、防火板是由多层牛皮纸经酚醛树胶浸渍后与一层经浸渍的装饰纸在高温高压下压制而成&#xff0c;将防火板经冷压或热压在中密度板或刨花板上用作橱柜门板。普通防火板的耐磨、耐划、耐高温等性能要好…

QT:KeepAliveOption的应用

由于用QTcpSocket写网络通讯程序&#xff0c;当正常服务端或者客户端断开的时候&#xff0c;我们监测信号即可&#xff1a;Signals&#xff1a;stateChanged(QAbstractSocket::SocketState)。&#xff08;手动关闭网络连接&#xff0c;也会检测到断开&#xff09; 但是当若是有…

Science:2019年度最佳科学照片

来源&#xff1a;ScienceAAAS、DeepTech深科技摘要 《Science》杂志在 近日选出了在这一年中最受欢迎&#xff0c;也最具有视觉冲击力的照片。1、Weather above 天气之上摄影师、飞行员Santiago Borja在太平洋上空拍摄到的巨大雷暴。科学家希望知道这种风暴是否会将化学物质注…

多源异构数据_构建数字孪生城市的CIM数据平台哪家强?

文/王颖初 数字城市系统建设中数据领域存在的问题随着经济的发展和信息化水平的飞速提升&#xff0c;数字城市的系统建设也日益普及。数字城市涉及规划、建设、城市管理、国土、交通、水利、安防、人防、环境保护、文物保护、能源燃气等各大行业&#xff0c;及一切与智慧城市相…

behavior php,YII2框架中behavior行为的理解与使用方法示例

本文实例讲述了YII2框架中behavior行为的理解与使用方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;YII2中的行为说白了就是对组件功能的扩展&#xff0c;在不改变继承关系的条件下。行为附加到组件后&#xff0c;行为将注入自已的方法和属性到组件&#xff0c;可…

数字前端工程师必备技能

必备知识&#xff1a; 1.ASIC基础 &#xff08;1&#xff09;digital intergrated circut design &#xff08;数字集成电路设计&#xff09; &#xff08;2&#xff09;digital design principles and practices &#xff08;数字设计——原理与实践&#xff09; &#xff08;…

乐观锁和悲观锁_什么是悲观锁和乐观锁?

思维导图文章已收录Github精选&#xff0c;欢迎Star&#xff1a;https://github.com/yehongzhi/learningSummary悲观锁悲观锁是平时开发中经常用到的一种锁&#xff0c;比如ReentrantLock和synchronized等就是这种思想的体现&#xff0c;它总是假设别的线程在拿线程的时候都会修…

oracle session_wait,转载:学习Oracle动态性能表-(8)-V$SESSION_WAIT,V$SESSION_EVENT

(1)-V$SESSION_WAIT这是一个寻找性能瓶颈的关键视图。它提供了任何情况下session在数据库中当前正在等待什么(如果session当前什么也没在做&#xff0c;则显示它最后的等待事件)。当系统存在性能问题时&#xff0c;本视图可以做为一个起点指明探寻问题的方向。V$SESSION_WAIT中…

为了研究因果关系,原来科学家在这么多方向上都有尝试

来源&#xff1a;混沌巡洋舰1. 为何关注因果关系在现代科学之前&#xff0c;不管东西方&#xff0c;都是从经验出发&#xff0c;通过归纳获得知识&#xff0c;然而这样的知识&#xff0c;受限于观测&#xff0c;无法产生突破性的成果&#xff0c;在这样的模式下&#xff0c;再探…

[leetcode sort]56. Merge Intervals

Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8,10],[15,18],return [1,6],[8,10],[15,18]. 合并重叠区间 1 class Solution(object):2 def merge(self, intervals):3 """4 :type i…

oracle solaris 内核 源码,直接安装内核区域

直接安装内核区域直接安装是缺省的内核区域安装方法。在直接安装中&#xff0c;安装程序将在全局区域中运行。缺省情况下&#xff0c;安装程序将创建和格式化内核区域引导磁盘&#xff0c;并使用全局区域的 pkg 发布者在该磁盘上安装 Oracle Solaris 软件包。注 -在内核区域直接…

mysql 有一组经纬度 返回在某个区域内_Qt编写地图综合应用17-地址经纬度互转

## 一、前言地址和经纬度互相转换的功能也经常用到&#xff0c;比如上次的路线方案查询的功能&#xff0c;之前官网是提供了直接输入出发地点和目的地的中文汉字&#xff0c;就可以查询到最优的路线&#xff0c;后面只支持输入出发地点和目的地的经纬度坐标了&#xff0c;这个就…

杨强 : 迁移学习——人工智能的最后一公里

来源&#xff1a;智能系统学报11月30日上午&#xff0c;第九届吴文俊人工智能科学技术奖颁奖典礼暨2019中国人工智能产业年会在苏州广电大厦演播厅隆重举行。本届大会主题是“突破关键技术赋能产业落地”。大会邀请到国家部委专家、两院院士和产业领军人士&#xff0c;围绕77场…