作用域和函数对象
名称空间的作用域
作用域
作用域就是名称空间所能够作用的范围。
内置名称空间
程序任何阶段任何位置均可使用(全局有效)。
全局名称空间
程序任何阶段任何位置均可使用(全局有效)。
局部名称空间
一般情况下只在各自的局部名称空间中有效。
关键字
如果数据为不可变类型则需要关键字global声明。如果数据为可变类型则无需关键字global声明。
关键字
def index(): print('from index') a = index a() # 本质就是在调用index函数
用法2:函数名可以当做函数的实参
def index(): print('from index') def func(a): print(a) a() print('from func') func(index)
用法3:函数名可以当做函数返回值
def index(): print('from index') def func(): print('from func') return index res = func() # 调用func并接受func的返回值 res()
用法4:函数名可以当做容器类型的元素
def index(): print('from index') l = [111, 222, 333, index()] print(l)
函数体内部定义其他函数。
目的是将复杂的功能全部隐藏起来 暴露一个简单的接口。
闭包函数的两个特征
闭:指定义在函数内部的函数。
包:内部函数使用了外部函数名称空间中的名字。
def outer(): x = 222 def index(): print('from index', x) return index
传值
利用闭包函数给函数传参。
特征
器:指的是工具。
装饰:给被装饰对象添加额外的功能。
原则
开放封闭原则
开放:对扩展开放。
封闭:对修改封闭。
核心思想
在不改变被"装饰对象内部代码"和"原有调用方式"的基础之上添加额外功能。
在满足上述条件的情况下添加计算运行时间功能。