每次调用函数时,函数内的变量是否被销毁并重新初始化



我很抱歉,我不太知道这个问题的最佳表达方式:

为了简单起见,如果我有一个函数:

def add_number(num):
to_add = 2 + 4
return to_add + num

和主要:

def __main__():
add_number(5)
add_number(10)
add_number(25)

变量to_add是否在程序离开函数作用域时被销毁,并在每次调用函数时重新初始化?这意味着在这种情况下,2+4是否计算了3次?或者它是由解释器缓存在内存中的。

显然,在这个例子中,每次计算to_add几乎没有什么缺点,但如果函数被调用数百次,并且to_add需要更多的运算来计算,那么程序就会减慢速度。

您可以确切地看到解释器使用dis模块对代码所做的操作。

add_number():的拆卸中可以看出

>>> from dis import dis
>>> dis(add_number)
2           0 LOAD_CONST               1 (6)
2 STORE_FAST               1 (to_add)
3           4 LOAD_FAST                1 (to_add)
6 LOAD_FAST                0 (num)
8 BINARY_ADD
10 RETURN_VALUE

变量to_add每次运行时都绑定在函数开头的本地命名空间中。但是,您会注意到编译器已经将2+4简化为6

如果to_add是一个更复杂的表达式,那么通过在函数外设置to_add可能会提高性能,因此只需计算并绑定一次即可。

相关内容

  • 没有找到相关文章

最新更新