代码之家  ›  专栏  ›  技术社区  ›  Abhishek Bhatia

递归函数默认可变参数

  •  0
  • Abhishek Bhatia  · 技术社区  · 6 年前

    假设你有这个功能: def f(..., visited= set()) .

    在里面,你打电话 f() 再一次。

    1 回复  |  直到 6 年前
        1
  •  1
  •   iBug    6 年前

    否。默认参数已处理 def visited ,同一个集合将被重用,并且常常会导致意外的结果。

    Python documentation :

    计算默认值 范围,所以。。。

    以及 重要警告

    默认值只计算一次。当默认值是可变对象(如列表、字典或大多数类的实例)时,这会有所不同。例如,以下函数将在后续调用时传递给它的参数累加起来: