当前位置: 首页> 健康> 知识 > python学习之闭包与装饰器

python学习之闭包与装饰器

时间:2025/7/18 3:23:02来源:https://blog.csdn.net/dudnf/article/details/140617745 浏览次数:0次

一、闭包

闭包允许一个函数访问并操作函数外部的变量(即父级作用域中的变量),即使在该函数外部执行。

特性:

(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()

关键字:python学习之闭包与装饰器

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: