管理默认参数以避免意外突变
在 Python 中,当默认参数是可变对象时,有时会导致意外行为。例如,使用空列表作为函数的默认参数可能会导致列表“记住”在先前调用中添加到其中的旧数据。
考虑以下函数:
def my_func(working_list=[]): working_list.append("a") print(working_list)
第一次调用时,将创建默认列表并附加“a”。但是,对该函数的后续调用会继续更新同一列表,从而导致意外行为。为了解决这个问题,我们必须确保每次调用函数时都使用一个新的空列表。
一种方法是显式将默认参数设置为 None 并在函数内检查它:
def my_func(working_list=None): if working_list is None: working_list = [] # alternative syntax: # working_list = [] if working_list is None else working_list working_list.append("a") print(working_list)
此方法确保在没有显式参数的情况下调用函数时创建一个新的空列表。
或者,您可以使用理解来创建列表并将其分配给默认参数:
def my_func(working_list=[[]]): working_list[0].append("a") print(working_list)
此方法还可以在每次调用时有效地生成一个新的空列表。
Python 文档建议使用 None 作为默认参数,并且明确地检查它。根据 PEP 8 指南,应使用“is”或“is not”运算符与 None 进行比较。
以上是如何在 Python 中使用可变默认参数来防止意外行为?的详细内容。更多信息请关注PHP中文网其他相关文章!