#装饰器
'''
加入购物车,付款,修改收获地址
判断用户登录状态
'''
def func(number):
a=100
def inner_func():
nonlocal a
nonlocal number
number+=1
for i in range(number):
a+=1
print('修改后的a的值:',a)
return inner_func
#调用func
f=func(5)
f1=func(5)
f1()
f()
#地址引用
a=10
b=a
def test(): #函数声明
print('---------------test---------------')
t=test()
print(t)
#装饰器
'''
特点:
1.函数A是作为参数出现的(函数B就接收函数A作为参数)
2.要有闭包的特点
'''
#定义一个装饰器
def decorate(func):
a=100
print('外层')
def wrapper():
func()
print('---------->装修')
print('---------->1111111')
print('---------->2222222')
print('完成')
return wrapper
'''
1.house()是被装饰函数
2.将被装饰函数作为参数传给decorate
3,执行decorate()函数,因为执行了这个函数所以会出现打印外层和完成
'''
@decorate
def house():
print('我是毛坯房;;;;;')
#调用函数
house()
#登录校验
import time
def decorate(func):
def wrapper(*x,**n):
print('正在校验中!')
time.sleep(2)
print('校验完毕!')
#调用原函数
func(*x,**n)
return wrapper
@decorate
def f1(n):
print('====f1====',n)
f1(1) #加了装饰器 已经变为wrapper wrapper没有参数,会报错 TypeError: wrapper() takes 0 positional arguments but 1 was given
@decorate
def f2(m,n):
print('====f2====',m,n)
f2(2,6)
@decorate
def f3(students,class1='qqq'):
for stu in students:
print(stu,class1)
stu=['1,',34]
f3(stu,class1='454')