📅  最后修改于: 2023-12-03 15:26:02.963000             🧑  作者: Mango
教资会网络(University Grants Commission - National Eligibility Test, UGC NET) 是一种全国性的考试,用于选拔印度大学和学院的讲师和研究生。本题目是 2015 年 12 月的计算机科学领域的一道真题。
以下是一段 Python 代码:
def fun(x, y, l=[]):
for i in range(x, y + 1):
l.append(i*i)
print(l)
fun(2, 3)
fun(3, 5, [3, 2, 1])
fun(1, 4)
运行代码会输出什么结果?为什么会这样输出?
代码的输出结果如下:
[4, 9]
[3, 2, 1, 9, 16, 25]
[4, 9, 1, 4, 9, 16]
首先我们来看 fun(2, 3)
:
fun(2, 3)
在 Python 中,函数的默认参数只会在第一次运行时给予初始化,以后再运行该函数时,就会使用上一次的值。因此在第一次调用 fun()
时,l
被初始化为空的列表 []
。在第一次调用后,这个列表被添加了元素 [4, 9]
。在第二次调用 fun()
时,我们希望使用自己提供的列表 [3, 2, 1]
,因此 l
会被初始化为 [3, 2, 1]
,并在此基础上添加元素 [9, 16, 25]
。最后一次调用 fun()
时,我们没有给出任何参数,因此 l
会被初始化为上次调用后的值 [9, 16, 25]
,并在此基础上添加元素 [1, 4, 9, 16]
,输出结果为 [4, 9, 1, 4, 9, 16]
。
Python 中默认参数只会在第一次调用时初始化,而且所有调用会共享这个初始化值。在使用含有默认参数的函数时,务必要注意参数的初始化问题,避免出现意料之外的结果。