作用域的类型及规则:
作用域分为四类:Local,Enclosing,Global,Built-in,遵循 L –> E –> G –>B 的规则查找。在python中,module,class,def fun,lambda会产生作用域,if else,while,for X in D,try exception,不会产生新的作用域。
作用域下的变量分两种:1 字典和列表为一类(变量名指向地址),当变量为字典和列表时,变量在任何作用域下是可以修改的。2 其他变量为一类,此时不可以修改不同作用域的变量(如内部函数不可以修改外部函数变量,强行修改,编译器会提示警告,且修改不会起作用,但是会相当于定义了一个新的变量),若是强行修改,需要借助nonlocal或者global关键字进行修改。其中,nonlocal用于修改闭包的变量,global用于修改外部作用域的变量。值的留意的地方是,nonlocal和global是python3出现的特性。
闭包:
1 闭包修改外层函数的变量,需要使用nonlocal对变量进行声明 2 闭包的定义是,函数+函数定义时环境。即闭包会保存变量状态。
函数式编程:
函数式编程,指的是通过函数达到面向对象才能达成的目标