python3 闭包
闭包是一个函数和它所引用的环境组合而成的实体。在Python中,闭包通常是在一个函数内定义另外一个函数,内部函数引用了外部函数的变量,然后返回内部函数作为结果。
下面是一个简单的闭包示例:
def outer_func(outer_var):
def inner_func():
print(outer_var)
return inner_func
# 创建闭包
closure = outer_func("Hello, Closure!")
# 调用闭包
closure()
在这个例子中,inner_func
是一个闭包,因为它访问了定义它的父函数outer_func
的变量outer_var
。当我们调用outer_func
时,它返回了一个inner_func
函数,这个函数在执行时可以访问outer_var
。即使outer_func
的执行环境已经结束,闭包仍然存在,保留了对原始定义作用域中变量的引用。
python3 装饰器
装饰器本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限验证等场景,装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。
装饰器实现原理
#无参数装饰器原理:
def login(funct):
print('passed user veriftcation...')
return funct #函数返回形参的值或内存地址
def tv():
print('welcom to TV page')
tvv= login(tv) #执行login函数,参数tv返回tv函数的内存地址
tvv() #执行生成器函数将执行tv函数
装饰器带传参函数,多层装饰器:
#验证函数
def login(*args,**kwargs):
print('%s登陆验证%s!'%(args,kwargs))
#登陆后操作
def quanxian(*args,**kwargs):
print('%s登陆后操作!%s'%(args,kwargs))
#装饰器
def decorator(login_func,quanxian_func): #传参2个函数
def inner(index_func): #传参登陆函数
def inner2(*args,**kwargs): #接收index的传参
login_func(*args,**kwargs) #执行login函数
index_func(*args,**kwargs) #执行index函数
quanxian_func(*args,**kwargs) #执行quanxian函数
return inner2 #返回函数地址
return inner #返回函数地址
@decorator(login,quanxian) #执行装饰器
def index(*args,**kwargs): #登陆函数
print('登陆后台!%s,%s'%(args,kwargs))
l1 = [1,2,3,4]
dic = {'k1':'v1','k2':'v2'}
index(l1,dic) #执行函数