这两个片段看起来相同,但可以给出不同的结果:
def foo():
bar(get_var())
...
# `var` alive?
def foo():
var = get_var()
bar(var)
...
# `var` alive?
在这两种情况下
...
零件不使用
var
; 唯一的区别是本地对象的生命周期
变量
; 看来
第一个片段中的对象比第二个片段中的对象更早被销毁;(在第一个代码段中,对象没有显式命名,但它显然意味着
get_var
;)
问题:
-
在第一个片段中,它能保证吗
变量
之后就被摧毁了
bar
返回?我们可以假设
酒吧
没有提到
变量
;
-
在第二个片段中,它能保证吗
变量
直到
foo
返回?运行时是否足够聪明,可以检测到
变量
之后将不再使用
酒吧
返回(即使它仍在
福
)?