函数对象函数嵌套名称空间与作用域闭包函数装饰器
Posted wangke0917
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数对象函数嵌套名称空间与作用域闭包函数装饰器相关的知识,希望对你有一定的参考价值。
一.函数对象
函数时第一类对象,函数可以当作数据传递
1.函数可以被引用
2.函数可以作为参数传入
3.函数可以作为函数的返回值
4.函数可以作为容器类型的元素
二.函数嵌套
1.函数嵌套调用:在函数内又调用了其他函数
2.函数嵌套定义:在函数内又定义了其他函数(只能在其函数内部调用,在其函数外部访问不到)
三.名称空间
名称空间:是用来存放名字与值绑定关系的地方
分为三类:
1.内置名称空间:python解释器自带的空间
特点:在解释器启动时就生效,解释器关闭时失效
2.全局名称空间:存放文件级别(顶头写的)的名字的地方,换句话说就是不在函数内的名字都存放在全局名称空间
特点:在执行文件时生效,在文件结束或在文件执行期间被删除则失效
3.局部名称空间:用来存放函数内定义的名字的地方
特点:在调用函数时临时生效,函数结束则失效
加载顺序:内置名称空间-->全局名称空间-->局部名称空间
查找名字:局部名称空间-->全局名称空间-->内置名称空间
四.作用域
1.全局作用域:包含的是内置名称空间和全局名称空间的名字
特点:在任何位置都能访问到,伴随程序的整个生命周期
2.局部作用域:包含的是局部名称空间的名字
特点:1.只能在函数内使用,2.调用函数时生效,函数结束时失效
五.闭包函数
闭:指的是定义在函数内部的函数
闭包函数:定义在函数内部的函数,并且该函数包含对外部函数作用域中名字的引用(打破了层级的限制)
闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,使得无论在何处调用该函数都优先使用自己外部包裹的作用域。
注意:作用域关系:在函数定义阶段就规定死了,与调用位置无关
def outter():
x=1
def inner():
print(x)
return inner
f=outter()
f()
六.装饰器
1.开放封闭原则:对修改原代码是封闭的,对功能的扩展是开放的
解决方案:能够在不修改一个功能原代码以及调用方式的前提下,为其添加新的功能
2.什么是装饰器?
在不修改被装饰对象原代码与调用方式的前提下,为被装饰对象添加新功能
def outter(func):
def inner(*args,**kwargs):
代码块
res=func(*args,**kwargs)
return res
return inner
@outter
def index():
代码块
index()
以上是关于函数对象函数嵌套名称空间与作用域闭包函数装饰器的主要内容,如果未能解决你的问题,请参考以下文章
python基础之====函数对象函数嵌套名称空间与作用域装饰器
20181128(闭包函数,函数嵌套,名称空间,作用域,装饰器待补充)
函数嵌套 ,名称空间与作用域 ,闭包函数 ,装饰器 ,迭代器, 生成器 三元表达式,列表解析,生成器表达式 递归与二分法, 内置函数