1、编写装饰器,为多个函数加上认证功能(用户账号密码来源于文件),要求:登录成功一次,后续的函数都无需再输入用户名和密码
1 import time
2 flage =
True
3 def login():#登录认证(三次认证,输错三次等待15秒,再次认证)
4 j =
0
5 lis =
[]
6 while j <
3:
7 j +=
1
8 username = input(
'请输入用户名:\n').strip()
9 password = input(
'请输入密码:\n')
10 with open(
'passwd_note',mode=
'r',encoding=
'utf-8')
as f:
11 for i
in f:
12 lis.append(i.strip())
13 if lis[
0] == username and lis[
1] ==
password:
14 print(
'认证成功!')
15 break
16 elif (
3-j) ==
0:
17 print(
'账号或密码输入错误请重新输入!您还有{}次机会,请15秒后重新输入!'.format(
3-
j))
18 j =
0
19 time.sleep(
15)
20 continue
21 else:
22 print(
'账号或密码输入错误请重新输入!您还有{}次机会'.format(
3-
j))
23
24
25 def wrapper_out(flage): #装饰器
26 def wrapper(func):
27 def inner(*args,**
kwargs):
28 global flage #修改全局变量申明
29 if flage:#认证通道
30 login()
31 ret = func(*args,**
kwargs)
32 flage =
False#修改全局变量,促使后面调用装饰器的函数直接走else,不走if
33 else:#不认证通道
34 ret = func(*args,**
kwargs)
35 return ret
36 return inner
37 return wrapper
38
39 @wrapper_out(flage) #
40 def mx(a,b):
41 print(max(a,b))
42
43 @wrapper_out(flage) #
44 def sm(a,b):
45 print(a+
b)
46
47 #调用
48 mx(
1,
2)
49 sm(
2,
3)
2、编写装饰器,为多个函数加上记录调用功能,要求每次调用函数都将被调用的函数名称写入文件
1 flage =
True
2 def wrapper_out(flage): #装饰器
4 def wrapper_func(func):
5 def inner(*args,**
kwargs):
6 if flage:
7 ret = func(*args,**
kwargs)
8 else:
9 ret = func(*args,**
kwargs)
10 with open(
'log',
'a',encoding=
'utf-8')
as f1:
11 f1.write(
'{}\n'.format(func.__name__)) #将调用函数的函数名的函数名写入文件
12 return ret
13 return inner
14 return wrapper_func
15
16 @wrapper_out(flage) #记录调用函数名的装饰器调用
17 def mx(a,b):
18 print(max(a,b))
19
20 @wrapper_out(flage)
21 def sm(a,b):
22 print(a+
b)
23
24 #调用
25 mx(
1,
2)
26 sm(
2,
3)
转载于:https://www.cnblogs.com/kindvampire/p/10310796.html
相关资源:python装饰器练习题及答案
转载请注明原文地址: https://mac.8miu.com/read-69723.html