使用 Jupyter 在函数中缓存变量



我有两个单元格。在第一个中,我设置了一个变量并调用了一个函数,第二个包含使用该变量的函数定义。

当我刷新第一个单元格时,尽管变量的值发生变化,但输出始终相同。仅当我使用函数定义重新运行单元格时,输出才会更改

In[]:  window=241
window_t=count_frame_indeces2()
window_t
Out[]: 241
In[]:  def count_frame_indeces2(window_f=window):
return window_f

即使我将window更改为 22,重新运行此单元格后的输出仍然是 241。如何避免在此函数中缓存变量?

函数的默认参数仅在函数定义时计算。因此,当您运行第二个单元格时,window_f从当前值window中获取其默认值。

当您第一次运行第二个单元格时,window的值显然是 241,所以这就是默认值window_f变成的。

然后,更改window的值并调用不带参数的函数,因此使用默认值 (241(。

当您第二次运行第二个单元格时,您再次定义了该函数,它为其默认参数获取了新值window

任一传递参数:

window_t=count_frame_indeces2(window)

或者,如果没有传递参数,则使函数使用当前值window

def count_frame_indeces2(window_f=None):
if window_f is None:
window_f = window
return window_f

我使用Facade pattern找到了另一种解决方案。我知道这是多余的,但我不想改变原始功能的定义。

def count_frame_indeces2(window_f=window):
return window_f
def count_frame():
return count_frame_indeces2(window)

最新更新