Jupyter中函数默认参数缓存变量问题:如何规避?
解决Jupyter中函数默认参数缓存变量值的问题
这是个非常典型的Python默认参数陷阱,我当初刚学Python的时候也踩过一模一样的坑!
问题根源
Python的函数默认参数是在函数定义的时刻就完成求值并绑定的,而不是每次调用函数时重新计算。你在第二个单元格定义count_frame_indeces2的时候,window的值是241,这个值就被永久绑定到了函数的默认参数window_f上。哪怕之后你修改了window的值,只要不重新定义函数,它的默认参数还是会沿用最初绑定的241,所以你重新运行第一个单元格调用函数时,输出不会变化。
解决方案
想要避免这种缓存情况,我们可以把默认参数设为None,然后在函数内部动态引用当前的window变量,这样每次调用函数时都会取最新的window值:
def count_frame_indeces2(window_f=None): # 如果没有传入参数,就使用当前全局的window变量值 if window_f is None: window_f = window return window_f
这样修改后,当你把window改成22并重新运行第一个单元格时,调用count_frame_indeces2()就会返回最新的22了。
另外还有一种更直接的方式:每次修改window后都重新运行函数定义的单元格,但显然这不是最方便的做法,上面的方法才是更优雅的解决方案。
内容的提问来源于stack exchange,提问作者JSowa
相关产品推荐
相关产品推荐

