函数(2)
函数对象
函数对象是第一类对象,函数是第一等公民
### 函数可以被当做变量去使用
1、可以被赋值
def func():
x = func
2、可以当做参数传给另外一个参数
def func():
return 1
def func1(x):
retrun x
func1(func())
3、可以当做函数的返回值
def func():
return func
4、可以当做容器类型的元素
函数嵌套
def outter():
def wrapper():
pass
名称空间与作用域
1、内置空间名称:存放的是Python解释器自带的名字,例如len,sum,print,input
生命周期:解释器启动则产生,解释器关闭则销毁
2、全局名称空间:存放的是顶级的名字,指的是未经历首行缩进的那些变量,被if缩进的同样属于全局名称,顶格写的函数也算是全局名称
生命周期:py程序刚开始运行则立即产生,py程序结束则销毁
3、局部名称空间:存放的是函数内的名字
生命周期:函数调用则产生,函数调用结束则销毁
名字访问的优先级:L--->E--->G--->B
基于自己当前所在位置一个个往外找
名称空间的“嵌套”关系在函数定义之初、扫描语法时产生的,与调用位置无关
global:用来在局部修改全局的不可变类型的值
nonlocal:用来修改上一层不可变类型的值,无法找到全局名称的变量
闭包函数:函数对象+函数的嵌套定义+名称空间与作用域
为函数体传参有两种方案
1、直接以参数的形式传入
2、包给它
使用第二种方法,就不得不提到一种编程思想、装饰器
装饰器
什么是装饰器
装饰器指的是装饰别人的工具,装饰指的则是为被装饰者添加新功能
但是实现装饰器必须遵循的原则是“开放封闭原则”
开发指的是对扩展新功能是开放的,封闭指的是对修改源代码以及调用方式是封闭的
综上。。。装饰器指的是创建一个工具,可以再
1、不修改被装饰对象源代码
2、不修改被装饰对象调用方式的前提下
如何使用装饰器
无参装饰器模板
def outter(func):
def wrapper(*args,**kwargs):
res = func(*args,**kwargs)
return res
return wrapper
有参装饰器模板
def auth(mode):
def outter(func):
def wrapper(*args,**kwargs):
res = func(*args,**kwargs)
return res
return wrapper
return outter
如何调用装饰器
@outter or @auth(mode)
def index():
print("from index")
浙公网安备 33010602011771号