Python 面试题

以下 Python 代码片段的输出是什么?证明你的答案。

def extendList(val, list=[]):
    list.append(val)
    return list

list1 = extendList(10)
list2 = extendList(123,[])
list3 = extendList('a')

print(f"list1 = {list1}")
print(f"list2 = {list2}")
print(f"list3 = {list3}")
点我看答案

上面的 Python 代码片段的结果是:

list1 = [10, 'a']
list2 = [123]
list3 = [10, 'a']

可能错误地期望 list1 等于 [10]list3['a'] 匹配,认为每次调用 extendListlist 参数都会初始化为其默认值 []

但是,运行流程就像在定义函数后创建一个新列表一样。只要有人在没有 list 参数的情况下调用 extendList 方法,就会使用相同的方法。它的工作方式与此类似,因为表达式(在默认参数中)的计算发生在函数定义时,而不是在调用期间。

因此,list1list3 在相同的默认列表上运行,而 list2 在它自己创建的单独对象上运行(通过将空列表作为 list 参数的值传递)。

extendList 函数的定义可以通过以下方式更改。

def extendList(val, list=None):
    if list is None:
        list = []
    list.append(val)
    return list

通过这个修订后的实现,输出将是:

list1 = [10]
list2 = [123]
list3 = ['a']
© 2022 刘士. All rights reserved.

结果匹配 ""

    没有匹配的结果 ""