我有两个单元格。在第一个中,我设置了一个变量并调用了一个函数,第二个包含使用该变量的函数定义。
当我刷新第一个单元格时,尽管变量的值发生变化,但输出始终相同。仅当我使用函数定义重新运行单元格时,输出才会更改
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)