做网站送给女友意义,wordpress彩虹插件,wordpress怎么跟vue,足球世界排名国家一、闭包#xff1a;
1. 外部函数嵌套内部函数
2. 外部函数返回内部函数
3.内部函数可以访问外部函数局部变量 闭包#xff08;Closure#xff09;是指在一个函数内部定义的函数#xff0c;并且内部函数可以访问外部函数的局部变量#xff0c;即使外部函数已经执行…一、闭包
1. 外部函数嵌套内部函数
2. 外部函数返回内部函数
3.内部函数可以访问外部函数局部变量 闭包Closure是指在一个函数内部定义的函数并且内部函数可以访问外部函数的局部变量即使外部函数已经执行完毕这种现象称为闭包。在Python中闭包常常用来实现一些特定功能例如保护变量、实现装饰器等。
import randomdef fun1():print(fun1)datas []def fun2():datas.append(random.randint(0, 100))print(fun2, datas)return fun2r fun1()
r()r1 fun1()
r1()print(id(r), id(r1)) 特点和用途 访问外部变量闭包可以访问定义它们的外部函数的局部变量即使外部函数已经返回闭包仍然保留对这些变量的引用。 保护变量可以通过闭包来保护数据因为外部函数的局部变量在闭包中不会被销毁或修改除非内部函数显式地修改它们。 实现装饰器装饰器本质上就是闭包它能够在不修改原函数代码的情况下动态地增加功能。
闭包在Python中常用于函数式编程和实现一些高级的编程模式能够提供更灵活和高效的编程解决方案。
二、装饰器
目的不改变函数原有实现给函数添加新功能
概念一个闭包就是一个函数在创建这个函数时可以访问的变量
实现闭包语法 装饰器Decorator是Python中一种特殊的函数它可以修改其他函数的行为或功能。装饰器本质上是一个函数它接收一个函数作为输入并返回一个新的函数作为输出。装饰器通常用于在不改变原函数代码的情况下动态地增加功能、修改函数的行为或者执行额外的操作。
装饰器案例
1.时间开销
import random
import timedatas [random.randint(1, 1000) for i in range(1000)]
datas_copy datas.copy()def time_cost(f):def calc(sort_type):start time.time()f(sort_type)print(f{f.__name__} {time.time() - start})return calctime_cost
def fun1(sort_type):datas.sort(reversesort_type)print(datas)time_cost
def fun2(sort_type):new_datas sorted(datas_copy, reversesort_type)print(new_datas)# fun1 time_cost(fun1)
fun1(True)# fun2 time_cost(fun2)
fun2(True) 权限校验
user Nonedef login_required(f):def chair():global userif user:f()else:while True:username input(用户名)password input(密码)if username admin and password 666666:user adminf()breakelse:print(用户名或密码错误)return chairdef index():print(首页)login_required
def center():print(个人中心)login_required
def cart():print(购物车)index()# center login_required(center)
center()# cart login_required(cart)
cart() 装饰器的特点和用途 修改函数行为装饰器允许我们在不修改原函数代码的情况下添加、修改或扩展函数的行为。 动态增加功能可以在函数调用前后执行额外的操作如输入验证、性能测试、日志记录等。 代码复用和简化装饰器可以避免代码重复使代码更加简洁和易于维护。 装饰器链可以同时应用多个装饰器形成装饰器链每个装饰器可以独立地修改函数的行为。
在实际应用中装饰器是Python中非常强大和灵活的特性被广泛用于Web框架、日志系统、权限控制等需要动态修改函数行为的场景。