针对不一样的app的验证,好比:天猫和天猫超市,京东商城和京东超市python
def wrapper_out(n): print(n) def wrapper(f): def inner(*args,**kwargs): if n == '腾讯': user_input = input('请输入用户名: ').strip() pass_input = input('请输入密码: ').strip() with open('qq.txt',mode='r+',encoding='utf-8') as f1: for i in f1: username,password = i.strip().split('|') if username == user_input and password == pass_input: print('登陆成功') ret = f(*args,**kwargs) return ret return False elif n == '抖音': user_input = input('请输入用户名: ').strip() pass_input = input('请输入密码: ').strip() with open('dy.txt',mode='r+',encoding='utf-8') as f2: for j in f2: username, password = j.strip().split('|') if username == user_input and password == pass_input: print('登陆成功') ret = f(*args, **kwargs) return ret return False return inner return wrapper @wrapper_out('腾讯') def qq(): print('成功访问qq') qq() @wrapper_out('抖音') def tiktok(): print('成功访问抖音') tiktok()
函数通常嵌套3层app
def wrapper_out(n): def wrapper(f): def inner(*args,**kwargs): with open(n,encoding = 'utf-8') as f1: for line in f1: user,pass = line.strip().split('|') username = input('请输入用户名: ').strip() password = input('请输入密码: ').strip() if username == user and passwor == pass: dic_status['status'] = True ret = f(*args,**kwargs) return ret
看到带参数的装饰器分两步执行:函数
1.执行warpper_out('腾讯')这个函数,把相应的参数'腾讯'传给n,而且获得返回值warpper 2.与@warpper结合,获得咱们以前熟悉的标准版的装饰器按照装饰器流程执行
练习题code
# 若是输入的是抖音的帐号和密码就访问抖音,若是输入的是腾讯的用户名和密码就访问腾讯 def wrapper_out(n): print(n) def wrapper(f): def inner(*args,**kwargs): if n == '腾讯': user_input = input('请输入用户名: ').strip() pass_input = input('请输入密码: ').strip() with open('qq.txt',mode='r+',encoding='utf-8') as f1: for i in f1: username,password = i.strip().split('|') if username == user_input and password == pass_input: print('登陆成功') ret = f(*args,**kwargs) return ret return False elif n == '抖音': user_input = input('请输入用户名: ').strip() pass_input = input('请输入密码: ').strip() with open('dy.txt',mode='r+',encoding='utf-8') as f2: for j in f2: username, password = j.strip().split('|') if username == user_input and password == pass_input: print('登陆成功') ret = f(*args, **kwargs) return ret return False return inner return wrapper @wrapper_out('腾讯') def qq(): print('成功访问qq') qq() @wrapper_out('抖音') def tiktok(): print('成功访问抖音') tiktok()
def wrapper_out(n): def wrapper(f): def inner(*args,**kwargs): user_input = input('请输入用户名: ').strip() pass_input = input('请输入密码: ').strip() with open(n,mode='r',encoding='utf-8') as f1: for i in f1: username,password = i.strip().split('|') if username == user_input and password == pass_input: print('登陆成功') ret = f(*args,**kwargs) return ret else: print('验证失败') return False return inner return wrapper @wrapper_out('qq') def qq(): print('成功访问qq') qq() @wrapper_out('dy') def tiktok(): print('成功访问抖音') tiktok()
def wrapper1(func1): # func1 = f原函数 def inner1(): print('wrapper1 ,before func') # 2 func1() print('wrapper1 ,after func') # 4 return inner1 def wrapper2(func2): # func2 == inner1 def inner2(): print('wrapper2 ,before func') # 1 func2() # inner1 print('wrapper2 ,after func') # 5 return inner2 @wrapper2 # f = wrapper2(f) 里面的f == inner1 外面的f == inner2 @wrapper1 # f = wrapper1(f) 里面的f == func1 外面的 f == inner1 def f(): print('in f') # 3 f() # inner2() # 输出结果 wrapper2 ,before func wrapper1 ,before func in f wrapper1 ,after func wrapper2 ,after func
递归就是本身用本身递归
官网规定: 默认递归的最大深度1000次ip
若是你递归超过100次尚未解决这个问题,那么执意使用递归,效率很低utf-8
形式input
def func(n): print(n) n += 1 func(n) func(1)
练习题it
# 查看电脑执行次数 import sys print(sys.setrecursionlimit(1000000)) def func(n): print(n) n += 1 func(n) func(1)
def age(n): if n == 1: return 18 else: return age(n-1) + 2 print(age(4)) # 输出结果 24 # l1 = [1, 3, 5, ['太白','元宝', 34, [33, 55, [11,33]]], [77, 88],66] def func(n): for i in n: if type(i) == list: func(i) else: print(i) func(l1) # 输出结果 1 3 5 太白 元宝 34 33 55 11 33 77 88 66