一、闭包
闭包允许一个函数访问并操作函数外部的变量(即父级作用域中的变量),即使在该函数外部执行。
特性:
(1)外部函数嵌套内部函数。
(2)外部函数可以返回内部函数。
(3)内部函数可以访问外部函数的局部变量。
def out():print("我是外层")n = 10def ins():print("我是内层")nonlocal nn += 30print(n)return insout()
i = out()
i()
二、装饰器
装饰器(Decorator)是Python中一种强大的函数或类修饰机制,它允许开发者在不修改原始函数或类代码的情况下,对其进行功能扩展或修改。装饰器基于函数式编程的概念,通过将函数作为参数传递给另一个函数,并返回一个新的函数来实现。
概念:一个闭包就是一个函数+在创建这个函数时可以访问的变量
定义:装饰器本质上是一个Python函数或类,它接收一个函数或类作为参数,并返回一个新的函数或类对象。
实现:闭包+@语法
@decorator
def func(): pass
三、装饰器案例
1.时间开销
def time_cost(f):def calc():start = time.time()f()print(f"结束执行: {f.__name__} 消耗时间 {time.time()-start}")return calc@time_costdef fun1():datas.sort()print(datas)# fun1 = time_cost(fun1)fun1()# fun1()@time_costdef fun2():new_datas = sorted(datas_copy)print(new_datas)# fun2 = time_cost(fun2)fun2()# fun2()
2.权限校验
# 当前登录用户user = Nonedef login_required(f):def check():global userif user:f()else:while True:username = input("输入用户名")password = input("输入密码")if username == "admin" and password == "123456":user = "admin"f()breakelse:print(f"用户名密码错误")return checkdef index():print(f"我是首页")@login_requireddef center():print(f"我是个人中心")@login_requireddef cart():print(f"我是购物车")# index()# center()# cart()index()# center = login_required(center)center()# cart = login_required(cart)cart()