代码之家  ›  专栏  ›  技术社区  ›  Cyker

python:局部变量生命周期

  •  1
  • Cyker  · 技术社区  · 6 年前

    这两个片段看起来相同,但可以给出不同的结果:

    def foo():
        bar(get_var())
        ...
        # `var` alive?
    
    def foo():
        var = get_var()
        bar(var)
        ...
        # `var` alive?
    

    在这两种情况下 ... 零件不使用 var ; 唯一的区别是本地对象的生命周期 变量 ; 看来 第一个片段中的对象比第二个片段中的对象更早被销毁;(在第一个代码段中,对象没有显式命名,但它显然意味着 get_var ;)

    问题:

    1. 在第一个片段中,它能保证吗 变量 之后就被摧毁了 bar 返回?我们可以假设 酒吧 没有提到 变量 ;

    2. 在第二个片段中,它能保证吗 变量 直到 foo 返回?运行时是否足够聪明,可以检测到 变量 之后将不再使用 酒吧 返回(即使它仍在 福 )?

    0 回复  |  直到 6 年前