Python 递归函数默认可变参数
假设您拥有以下函数:Python 递归函数默认可变参数,python,Python,假设您拥有以下函数:def(…,visited=set()) 在内部,再次调用f() 在此递归调用中,如果未传递VISTER,将创建一个新的VISTER set()?否。当第一次运行def语句时,默认参数只处理一次。因此,如果您没有为访问的传递另一个参数,同一个集合将被重用,并且常常会导致意外的结果 从: 默认值在定义范围内的函数定义点处进行计算,以便 以及下面的重要警告 默认值仅计算一次。当默认值是可变对象(如列表、字典或大多数类的实例)时,这会有所不同。例如,以下函数累积在后续调用中传递给它
def(…,visited=set())
在内部,再次调用f()
在此递归调用中,如果未传递VISTER,将创建一个新的VISTER set()?否。当第一次运行
def
语句时,默认参数只处理一次。因此,如果您没有为访问的传递另一个参数,同一个集合将被重用,并且常常会导致意外的结果
从:
默认值在定义范围内的函数定义点处进行计算,以便
以及下面的重要警告
默认值仅计算一次。当默认值是可变对象(如列表、字典或大多数类的实例)时,这会有所不同。例如,以下函数累积在后续调用中传递给它的参数:
不,它将保持不变。这是一个常见的错误。只需使用None
作为默认值,如果访问的为None
,则初始化一个新的空集。您是否了解一般行为:如果是。为什么您希望递归调用的行为与任何其他函数调用的行为有所不同?例如,以下函数在后续调用中累积传递给它的参数:
什么函数?