show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
-
上次学习了嵌套的函数定义
- 在outer里面又定义了一个函数inner
- 可以在outer里用程序调用inner
-
这个嵌套层次可能有很多很多层
-
简单来说就是
- 外部定义的内部可见
- 内部定义的外部不可见
- 内外同名的内层屏蔽外层
-
如果我就想让inner函数读写outer函数中的局部变量
-
应该如何呢?🤔
- 把这个东西定义成全局(global)的
- 主程序不认inner_local
- 尝试在主程序中定义inner_local
- 虽然变量的名字叫做
inner_local
- 但是他确实是一个全局变量
- 如果我只希望inner_local在outer函数中可见
- 但是在主程序中不可见
- 有可能么?
- 这个应该离着global的帮助文档不远
- nonlocal声明的变量
- 必须是上一层函数中已经存在的局部(local)变量
- 上一层的直接父函数outer可以访问
- 主程序能够访问inner_local么?
- 主程序不能访问
- 只有直接上一层的父函数能够访问
- 在子函数inner中
- 可以用nonlocal修改父函数outer中的局部(local)变量么?
- 确实可以修改
- 如果给全局(global)的变量声明为nonlocal会如何呢?
- nonlocal不能声明已经声明为全局(global)的变量
- 三个作用于类型!!!
- local 本地可见 (默认)
- global 全局可见
- nonlocal 非本地可见(上一层函数也可见)
- 我们研究了nonlocal
- nonlocal是控制变量作用域(scope)的关键字
- 目前学了3个
- global 全局可见
- local 本地可见
- nonlocal 非本地可见(上一层函数也可见)
- 函数既然已经是封装(encapsulate)了的功能(function)
- 为什么还要进一步封装呢?
- 函数中的函数有什么意义呢?
- 我们下次再说👋