函数3
一、闭包函数
-
闭包:内部函数对外部函数作用域而非全局作用域的引用
-
两种为函数传参的方式
-
def func(x):
print(x)
func(1)
def outter(x):
x = 1
def inner(x):
print(x)
return inner
f = outter(1)
f()
二、装饰器
-
开放封闭原则
-
对扩展开放
-
对修改封闭
-
装饰器的特点:
-
装饰器本身是可以任意调用的对象
-
被装饰对象也可以是任意可调用的对象
-
装饰器的两大原则:
-
不修改被装饰对象的源代码
-
不修改被装饰对象的调用方式
- 装饰器语法糖
在被装饰函数正上方,并且是单独一行写上@装饰器名
-
两层装饰器模板
def deco(funco):
def wrapper(*args, **kwargs):
res = func(*args, **args)
return res
return wrapper
@deco
def index():
pass
from functools import wraps
def deco(func):
@wraps(func)
def wrapper(*args, **kwargs):
res = func(*args, **kwargs)
return res
return wrapper
@deco
def index():
pass
print(index.__doc__)
print(index.__name__)
-
带参数的装饰器
def outer(flag):
def innre(func):
def func(*args, **kwargs):
if flag:
print('执行函数前要做的')
res = func(*args, **args)
if flag:
print('执行函数之后要做的')
return res
return func
return inner
@outer(False)
def index():
pass
index()