一:储备知识
1. *args **kwargs
def index(x,y):
print(x,y)
def wrapper(*args,**kwargs):
index(*args,**kwargs)
wrapper(11,y=22) #为wrapper函数传的实参值取决于index函数的形参的参数个数
2.名称空间与作用域:名称空间的”嵌套“关系是在函数定义阶段,即检测语法的时候确定的
3.函数对象
可以把函数(函数的内存地址)当做参数传入
可以把函数(函数的内存地址)当做返回值返回
def ind():
pass
def foo(func):
return func
foo(ind) #把函数的内存地址当做实参值传入
4,函数的嵌套定义
def outter(func): #函数的嵌套定义,结合上面的可以传入函数内存地址当做参数
def internal():
pass
return internal #结合上面的可以把internal函数内存地址当做返回值返回
闭包函数
当函数体代码需要参数时,通过闭包方式传参
def outter(x): #3.定义一个函数包起来
#x=1 #1.定义函数体所需的变量参数
def internal():
x
return internal #2.将函数当做返回值返回(return的是outter函数内的internal那个函数的内存地址)
internal=outter(1)
学完闭包函数后:
传参的方式一:通过参数的形式为函数体传参
传参的方式二:通过闭包的方式为函数体传参
二、装饰器
1.什么是装饰器
器指的是工具,可以定义成函数
装饰指的是为其它事务添加功能额外的东西点缀
合到一起的解释:
装饰器指的定义一个函数(可以是类),该函数是用来为其它函数添加额外的功能
2.为何要用装饰器
开放封闭原则
开放:指的是对拓展功能(源代码不动的情况下)是开放的
封闭:指的是对修改源代码是封闭的
装饰器就是在不修改被装饰器对象源代码以及调用方式的前提下为被装饰对象添加新功能
3.如何用
原有的代码
def func(x):
print(11111)
print(22222)
对原有的源代码体逻辑修改也是修改
def func(x):
if x =1:
print(11111)
print(11111)
elif x=2:
print(33333)
print(33333)
else:
print(00000)