10. 函数和匿名函数(二)
目录
1. 嵌套函数
1.1 作用域
1.2 函数是如何运行的?
2. 闭包
2.1 必备三要素
2.2 最小示例
2.3 典型应用:计数器工厂
2.4 函数内部局部变量是重建还是重用?
3. 无状态与有状态的闭包
3.1 无状态闭包(纯函数)
3.2 有状态闭包(带记忆)
4. lambda表达式
4.1 lambda表达式好处
4.2 将lambda表达式作为排序键
5. 装饰器
5.1 不带参数的装饰器
5.2 带参数的装饰器(再包一层)
5.3 模板
6. 类型提示及函数注解
7. 应该使用类型提示吗?
1. 嵌套函数
如果想在函数内复用一些逻辑,而又不想创建一个函数以避免代码更加混乱,这种情况下,我们可以在函数内部中嵌套函数。
def outer(x):def inner(y): # 嵌套函数return x + yreturn inner(3)
在函数内部定义一个inner函数,在outer函数中可以直接调用这个内部函数。
1.1 作用域
关于作用域,嵌套函数可以访问其封闭作用域中的名称,如上述代码中直接用到了outer的参数x。但是如果想在嵌套函数内部重新绑定或改变其中的任何名称,则需要使用nonlocal关键字。
nonlocal
让内层函数可以修改外层(非全局)函数的局部变量,而不是创建同名的新变量。
这里简单回顾作用域规则: