# -*- coding:utf8 -*-
# Author : Mr·Yang

'''
装饰器,带参数装饰器,装饰器中带参数
'''


import time

# 普通装饰器
'''
def time_decor(func):
def wrapper():
star_time = time.time()
func()
down_time = time.time()
print("总耗时为", down_time - star_time)

return wrapper

@time_decor
def wait():
time.sleep(2)

if __name__ == '__main__':
wait()
'''

# 被装饰函数带参数
'''
def time_decor(func):
def wrapper(name):
star_time = time.time()
func(name)
down_time = time.time()
print("总耗时为", down_time - star_time)

return wrapper

@time_decor
def wait(name):
print("这是{}带参数的装饰器".format(name))
time.sleep(2)

if __name__ == '__main__':
name = "yanglei"
wait(name)



# 带参数的装饰器

def time_decor(cond):
def external(func):
def wrapper():
if cond == "True":
star_time = time.time()
func()
down_time = time.time()
print("总耗时为", down_time - star_time)
else:
print("\033[31;1m这是啥也没干的\033[0m")
func()

return wrapper

return external

@time_decor(cond="False")
def wait():
time.sleep(2)

if __name__ == '__main__':
wait()


# 装饰器和被装饰函数都带参数

def time_decor(cond):
def external(func):
def wrapper(*args, **kwargs):
if cond == "True":
star_time = time.time()
func(*args, **kwargs)
down_time = time.time()
print("总耗时为", down_time - star_time)
else:
print("\033[31;1m这是啥也没干的\033[0m")
func()

return wrapper

return external

@time_decor(cond="True")
def wait(*args, **kwargs):
print(len(args))
if len(args) > 1:
time.sleep(2)
if args[0]==1:
print(123)
else:
print(args)
if __name__ == '__main__':
name, age, sun = 1, 2, 3
wait(name, age, sun)


# 被装饰函数带返回值
def time_decor(func):
def wrapper(*args, **kwargs):
if func(*args, **kwargs) == None:
print("没有返回值的函数对象")
else:

print("带返回值的函数对象")
res = func(*args, **kwargs)
return res

return wrapper

@time_decor
def wait(*args, **kwargs):

sun = args[0]+args[1]
return sun

if __name__ == '__main__':
x = 111
y = 222
a = wait(x,y)
print(a)
'''

#

def time_decor(func):
def wrapper():
start_time = time.time()
func()
down_time = time.time()

return wrapper

import threading
import time

def time_out(timer):
'''
一个规定函数执行时间的装饰器
:param timer:
:return:
'''

def wrapper(func):
def __wrapper():
start_time = time.time()
# 通过设置守护线程强制规定函数的运行时间
t = threading.Thread(target=func)

t.setDaemon(True)
t.start()
time.sleep(timer)
if t.is_alive():
# 若在规定的运行时间未结束守护进程,则主动抛出异常
raise Exception('Function execution timeout')
print (time.time()-start_time)

return __wrapper

return wrapper

@time_out(50)
def timer():
time.sleep(10)

timer()

最新文章

  1. c++11的右值引用、移动语义
  2. 作业七:团队项目——Alpha版本冲刺阶段002
  3. "自定义事件"的优点在哪里?
  4. spring中涉及事务(bean中ref与local)
  5. Unity 功夫猫
  6. poj 3370 Halloween treats(鸽巢原理)
  7. Windows phone 8 学习笔记
  8. 学问Chat UI(3)
  9. Android简易实战教程--第十八话《ListView显示,简单的适配器SimpleAdapter》
  10. 【CentOS&Core】CentOS7下安装.NET Core SDK 2.1
  11. hdu6331 Walking Plan
  12. 关于Windows 8 合约
  13. 自定义View,随着手指运动的小球
  14. ThinkPHP3.2多域名 Virtual .htaccess 匹配 RewriteCond %{HTTP_HOST}
  15. Python集成开发环境搭建
  16. 【Java】得到本机IP
  17. vue的面包屑导航组件
  18. 【转】字符串匹配的KMP算法:移动位数 = 已匹配 - 部分匹配值(共有长度)
  19. 611. Valid Triangle Number三角形计数
  20. 深度学习:参数(parameters)和超参数(hyperparameters)

热门文章

  1. 如何个性化定制iview中的table样式
  2. Apache Flink Dashboard未授权访问导致任意Jar包上传漏洞
  3. 面试大厂,90%会被问到的Java面试题(附答案)
  4. 二叉堆python实现
  5. 会声会影使用教程:剪辑Vlogo短视频
  6. Ayoa:麻雀虽小、五脏俱全的思维导图工具
  7. 如何使用ABBYY FineReader处理文档图像的缺陷?
  8. Spring中各个模块
  9. 【PYTEST】第二章编写测试函数
  10. 这份SpringMVC执行原理笔记,建议做java开发的好好看看,总结的很详细!