假设您具有以下功能:def f(..., visited= set())
。
在内部,您再次致电f()
。
在此递归调用中,如果您不通过访问,是否会创建一个新的访问set()?
答案 0 :(得分:1)
不。第一次运行def
语句时,仅对一次处理默认参数。因此,如果您不为visited
传递另一个参数,则相同的集合将被重用,并且通常会导致意外的结果。
在定义范围内,在函数定义时对默认值进行评估 ,以便...
以及下面的重要警告。
默认值仅计算一次。当默认值是可变对象(例如列表,字典或大多数类的实例)时,这会有所不同。例如,以下函数累积在后续调用中传递给它的参数: