zoukankan      html  css  js  c++  java
  • 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
    ",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
    

    即:
    内部函数引用了外部函数内部的变量,使该变量超出正常的生命周期而存在,这种情况称为闭包.(理解就好)

  • 相关阅读:
    iOS开发>学无止境
    iOS开发>学无止境
    Review1(C#语言基础)
    Lua
    c#笔记(四)——switch
    鼠标拖拽物体
    lua-路径加载lua文件-函数返回值,访问lua文件中的变量
    lua-1-c# 执行lua文件-调用lua文件中的方法
    Unity实现手机录音功能
    lua-table类的继承
  • 原文地址:https://www.cnblogs.com/aloe-n/p/13407840.html
Copyright © 2011-2022 走看看