1. 递归函数
体现
函数 A 内部, 继续调用函数 A
概念
传递
回归
注意事项
有传递, 一定要有回归
否则, 就是无限的循环调用
案例
求一个数值的阶乘
2. 函数作用域
基本概念
变量的作用域
变量的作用范围
可操作范围
Python 是静态作用域, 也就是说在 Python 中, 变量的作用域源于它在代码中的位置;
在不同的位置, 可能有不同的命名空间
命名空间
是作用域的体现形式
不同的具体的操作范围
- Python-LEGB
- L-Local
函数内的命名空间
作用范围: 当前整个函数体范围
E-Enclosing function locals
外部嵌套函数的命名空间
作用范围: 闭包函数
G-Global
全局命名空间
作用范围: 当前模块 (文件)
B-Builtin
内建模块命名空间
作用范围: 所有模块 (文件)
注意
Python 中没有块级作用域
块级作用域
代码块中, 比如 if while for 后的代码块
LEGB 规则
按照 L -> E -> G -> B 的顺序进行查找
基于命名空间的常见变量类型
局部变量
在一个函数内部定义的变量;
作用域为函数内部
查看局部变量
locals()
全局变量
在函数外部, 文件最外层定义的变量
作用域为整个文件内部
查看全局变量
globals()
注意点
访问原则
从内到外
结构规范
全局变量
函数定义
使用
修改
后续代码
全局变量和局部变量重名
获取
就近原则
修改
global 全局变量
声明
- l -> e
- unlocal
命名
全局变量
g_xxx
来源: http://www.jianshu.com/p/599ec7cf997f