在 Python编程教程 中,函数的默认参数是一个既实用又容易被误解的概念。很多初学者在使用 Python默认参数 时会遇到意想不到的问题,尤其是当默认参数是可变对象(如列表、字典)时。本文将用通俗易懂的方式带你彻底搞懂 Python函数参数 的默认值机制,并重点揭示那个著名的“Python可变默认参数陷阱”。
默认参数是指在定义函数时,为某些参数预先指定一个默认值。这样在调用函数时,如果未传入该参数,就会自动使用默认值。
def greet(name, message="你好!"): print(f"{name},{message}")# 调用函数greet("小明") # 输出:小明,你好!greet("小红", "早上好") # 输出:小红,早上好上面的例子中,message 就是一个默认参数。第一次调用时没有传入第二个参数,所以使用了默认值 "你好!"。
当你使用可变对象(如列表 []、字典 {})作为默认参数时,就可能掉入一个经典陷阱。

看下面这个例子:
def add_item(item, target_list=[]): target_list.append(item) return target_list# 第一次调用list1 = add_item("苹果")print(list1) # 输出:['苹果']# 第二次调用list2 = add_item("香蕉")print(list2) # 输出:['苹果', '香蕉'] ← 意外!print(list1 is list2) # 输出:True你可能会以为第二次调用会返回 ["香蕉"],但结果却是 ["苹果", "香蕉"]!这是因为 Python可变默认参数陷阱:默认参数在函数定义时只被创建一次,而不是每次调用时都重新创建。
解决方法很简单:使用 None 作为默认值,并在函数内部判断是否需要创建新的可变对象。
def add_item(item, target_list=None): if target_list is None: target_list = [] target_list.append(item) return target_list# 测试list1 = add_item("苹果")list2 = add_item("香蕉")print(list1) # ['苹果']print(list2) # ['香蕉']print(list1 is list2) # False这样每次调用函数时,如果没有传入 target_list,都会创建一个新的空列表,避免了共享同一个列表对象的问题。
None 作默认值,在函数内部初始化可变对象。掌握这些技巧,你就能写出更健壮、更可靠的 Python函数参数 代码。希望这篇 Python编程教程 对你有所帮助!
本文由主机测评网于2025-12-07发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025124135.html