学习装饰器的时候提到了闭包的概念,沉淀下所学
闭包即内部函数使用了外部函数中的变量,
这里有几个需要重点理解的:
①首先至少是有两级函数嵌套;
②是外部函数中声明的,即若在内部函数中声明了同名的局部变量也是不在该范围的;
③一定是变量(不是数值相同的常量);
举个例子:
1、 使用了外部函数的变量
def outer_fun():
a=1
def inner_fun(): ---属于闭包函数
print (a+1)
return inner_fun
2、 使用了同名的内部函数的变量
def outer_fun():
a=1
def inner_fun(): ---不属于闭包函数
a=2
print (a+1)
return inner_fun
3、使用了相同值的常量
def outer_fun():
a=1
def inner_fun(): ---不属于闭包函数
print (1)
return inner_fun
以上纯属个人学习笔记,如有不足还望指摘,不吝赐教。
二、装饰器的固定格式
def 装饰器的名字(func):
def inner(*args,**kwargs):
'''在执行要被装饰的函数之前要做的事儿...'''
'''比如判断登录'''
ret=func(*args,**kwargs)
'''在执行被装饰的函数之后要做的事儿...'''
'''比如写log'''
return ret
return inner
@装饰器的名字
def fun():
pass
浅浅了解*args与**kwargs
args:将多个实参放入一个元组中,可以传多个参数,按照位置传参,多余的按照list的形式写入args中,比如:a,*args,c=1,2,3,4,5,6,4,3,9,则a=1,*args=[2,3,4,5,6,4,3],c=9
**kwargs:按照关键字传值,将多余的值以字典的形式传递