1.带参数的装饰器
def wrapper_out(n):
def wrapper(f):
def inner(*args,**kwargs):
ret=f(*args,**kwargs)
return ret
return inner
return wrapper
def wrapper_out(n):
def wrapper(f):
def inner(*args,**kwargs):
user = input("请输入账号:")
pwd = input("请输入密码:")
with open(n,mode="r",encoding="utf-8")as f1:
for i in f1:
a,b=i.strip().split("|")
if user==a and pwd==b:
print("登录成功")
ret = f(*args,**kwargs)
return ret
else:
print("账号或密码错误")
return inner
return wrapper
@wrapper_out("qq")
def qq():
print("欢迎登录qq")
@wrapper_out("tiktok")
def tiktok():
print("欢迎登录抖音")
qq()
tiktok()
2.多个装饰器装饰一个函数
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()
3.递归函数
递归函数 => 自己用自己
官网规定:默认递归的最大深度1000次
如果你递归超过100次还没有解决这个问题,那么执意使用递归,效率很低
#蔡徐坤18岁,ikun1比他大2岁,ikun2比ikun1大两岁,ikun3比ikun2大两岁
def age(n):
if n == 1:
return 18
else:
return age(n-1) + 2
print(age(4))