上述 Python 代码片段的结果是:
list1 = [10, 'a']
list2 = [123]
list3 = [10, 'a']
可能错误地认为 list1
等于 [10]
并且 list3
与 [‘a’] 匹配,认为每次调用 extendList
时列表参数都会初始化为其默认值 []
。
但是,流程就像在定义函数后创建了一个新列表。 每当有人在没有列表参数的情况下调用 extendList
方法时,都会使用相同的方法。 它的工作原理是这样的,因为表达式的计算(在默认参数中)发生在函数定义时,而不是在调用期间。
因此 list1 和 list3 在同一个默认列表上运行,而 list2 在它自己创建的单独对象上运行(通过传递一个空列表作为 list 参数的值)。extendList
函数的定义可以通过以下方式进行更改。
def extendList(val, list=None):
if list is None:
list = []
list.append(val)
return list
通过这个修改后的实现,输出将是:
list1 = [10]
list2 = [123]
list3 = ['a']