程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

新手学Python避坑,学习效率狂飙! 六、Python 默认可变参数

hfteth 2025-06-12 12:47:51 技术文章 9 ℃

在 Python 里,函数能够定义默认参数,在调用函数时若未提供该参数的值,就会使用默认值。不过,使用默认可变参数时得格外留意,因为可变对象(像列表、字典这类)在函数定义时就已创建,并且在多次调用函数时会持续存在。

问题示例

以下代码展示了使用默认可变参数可能出现的问题:

python

Bash
def add_item(item, my_list=[]):
    my_list.append(item)
    return my_list

print(add_item(1))
print(add_item(2))

在上述代码中,定义了add_item函数,其默认参数my_list是一个空列表。当首次调用add_item(1)时,会向空列表里添加元素1,接着返回该列表。然而,当第二次调用add_item(2)时,my_list并不会重新初始化为空列表,而是会接着使用之前的列表,所以会添加元素2到已有元素1的列表里。

输出结果

plaintext

Bash
[1]
[1, 2]

避坑方法

要避免这种问题,可将默认参数设为None,然后在函数内部对其进行检查,若为None,就创建一个新的可变对象。以下是改进后的代码:

python

def add_item(item, my_list=None):
    if my_list is None:
        my_list = []
    my_list.append(item)
    return my_list

print(add_item(1))
print(add_item(2))

改进后的输出结果

plaintext

[1]
[2]

总结

在 Python 里使用默认可变参数时,要牢记可变对象只会在函数定义时创建一次,并且会在多次调用函数时持续存在。为了避免意外状况,推荐把默认参数设为None,然后在函数内部创建新的可变对象。

资料整理不易,请点赞,收藏,加关注!

最近发表
标签列表