python 利用闭包模拟 c 静态局部变量效果
python 利用闭包模拟 c 静态局部变量效果
c 静态局部变量
c 语言中静态局部变量只有在第一次被使用时初始化一次.示例如下:
#include <stdio.h>
int next_num()
{
static int a = 0;
return ++a;
}
int main()
{
for (int i = 0; i < 5; i++)
{
printf("%d\n",next_num());
}
}
执行结果
1
2
3
4
5
python 利用闭包实现同样效果
代码
def instantiate(func):
return func()
@instantiate
def next_num():
a = 0
def inner():
nonlocal a
a += 1
return a
return inner
if __name__ == "__main__":
for i in range(5):
print(next_num())
执行结果
1
2
3
4
5
理解闭包
要理解闭包,首先要理解变量作用域.
def test():
a = 0
return a
在上面的代码中,变量 a 在 test 函数被调用时初始化,调用结束后就销毁了,这是正常局部变量的生命周期.
然而,如果 test 内部有函数引用 a,那么 test 调用结束后 a 便不会被销毁.
def test():
a = 0
def inner():
return a
return a
即:
内部函数引用了外部函数内部的变量,使该变量超出正常的生命周期而存在,这种情况称为闭包.(理解就好)