📌  相关文章
📜  教资会网络 | UGC NET CS 2015 年 12 月 – II |问题 14(1)

📅  最后修改于: 2023-12-03 15:26:02.963000             🧑  作者: Mango

教资会网络 | UGC NET CS 2015 年 12 月 - II | 问题 14

简介

教资会网络(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 中默认参数只会在第一次调用时初始化,而且所有调用会共享这个初始化值。在使用含有默认参数的函数时,务必要注意参数的初始化问题,避免出现意料之外的结果。