装饰器,带参数装饰器,装饰器中带参数
1 import time
2
3 # 普通装饰器
4 '''
5 def time_decor(func):
6 def wrapper():
7 star_time = time.time()
8 func()
9 down_time = time.time()
10 print("总耗时为", down_time - star_time)
11
12 return wrapper
13
14 @time_decor
15 def wait():
16 time.sleep(2)
17
18 if __name__ == '__main__':
19 wait()
20 '''
1 # 被装饰函数带参数
2 '''
3 def time_decor(func):
4 def wrapper(name):
5 star_time = time.time()
6 func(name)
7 down_time = time.time()
8 print("总耗时为", down_time - star_time)
9
10 return wrapper
11
12 @time_decor
13 def wait(name):
14 print("这是{}带参数的装饰器".format(name))
15 time.sleep(2)
16
17
18 if __name__ == '__main__':
19 name = "yanglei"
20 wait(name)
1 # 带参数的装饰器
2
3 def time_decor(cond):
4 def external(func):
5 def wrapper():
6 if cond == "True":
7 star_time = time.time()
8 func()
9 down_time = time.time()
10 print("总耗时为", down_time - star_time)
11 else:
12 print("\033[31;1m这是啥也没干的\033[0m")
13 func()
14
15 return wrapper
16
17 return external
18
19
20 @time_decor(cond="False")
21 def wait():
22 time.sleep(2)
23
24 if __name__ == '__main__':
25 wait()
1 # 装饰器和被装饰函数都带参数
2
3 def time_decor(cond):
4 def external(func):
5 def wrapper(*args, **kwargs):
6 if cond == "True":
7 star_time = time.time()
8 func(*args, **kwargs)
9 down_time = time.time()
10 print("总耗时为", down_time - star_time)
11 else:
12 print("\033[31;1m这是啥也没干的\033[0m")
13 func()
14
15 return wrapper
16
17 return external
18
19
20 @time_decor(cond="True")
21 def wait(*args, **kwargs):
22 print(len(args))
23 if len(args) > 1:
24 time.sleep(2)
25 if args[0]==1:
26 print(123)
27 else:
28 print(args)
29 if __name__ == '__main__':
30 name, age, sun = 1, 2, 3
31 wait(name, age, sun)
1 # 被装饰函数带返回值
2 def time_decor(func):
3 def wrapper(*args, **kwargs):
4 if func(*args, **kwargs) == None:
5 print("没有返回值的函数对象")
6 else:
7
8 print("带返回值的函数对象")
9 res = func(*args, **kwargs)
10 return res
11
12 return wrapper
13
14
15 @time_decor
16 def wait(*args, **kwargs):
17
18 sun = args[0]+args[1]
19 return sun
20
21
22 if __name__ == '__main__':
23 x = 111
24 y = 222
25 a = wait(x,y)
26 print(a)
1 # 计算运行时间的装饰器
2 def time_decor(func):
3 def wrapper():
4 start_time = time.time()
5 func()
6 down_time = time.time()
7
8 return wrapper
1 import threading
2 import time
3
4
5 def time_out(timer):
6 '''
7 一个规定函数执行时间的装饰器
8 :param timer:
9 :return:
10 '''
11
12 def wrapper(func):
13 def __wrapper():
14 start_time = time.time()
15 # 通过设置守护线程强制规定函数的运行时间
16 t = threading.Thread(target=func)
17
18 t.setDaemon(True)
19 t.start()
20 time.sleep(timer)
21 if t.is_alive():
22 # 若在规定的运行时间未结束守护进程,则主动抛出异常
23 raise Exception('Function execution timeout')
24 print (time.time()-start_time)
25
26 return __wrapper
27
28 return wrapper
29
30
31 @time_out(50)
32 def timer():
33 time.sleep(10)
34
35
36 timer()