Python默认参数详解

在 Python 中,函数的默认参数(Default Arguments)允许你在定义函数时为某些参数指定一个默认值。调用函数时,如果未提供这些参数的值,它们将自动使用默认值。这一特性可以简化函数调用,提高代码的灵活性。


1. 基本语法

python

复制代码
def greet(name, message="Hello"):
复制代码
    print(f"{message}, {name}!")
  • 参数 name 没有 默认值,调用时必须传入。
  • 参数 message 有默认值 "Hello",调用时可以省略。

python

复制代码
greet("Alice")          # 输出:Hello, Alice!
复制代码
greet("Bob", "Hi")      # 输出:Hi, Bob!

2. 默认参数的位置规则

所有带默认值的参数必须出现在不带默认值的参数之后 ,否则会引发语法错误:

python

复制代码
def func(a=1, b):    # 错误:SyntaxError
复制代码
    pass
复制代码
复制代码
def func(a, b=1):    # 正确
复制代码
    pass

3. 默认值的求值时机

默认参数的值只在函数定义时计算一次 ,而不是每次调用时重新计算。这会导致一个常见的陷阱:当默认值是可变对象(如列表、字典)时,多次调用可能共享同一个对象

陷阱示例

python

复制代码
def add_item(item, lst=[]):
复制代码
    lst.append(item)
复制代码
    return lst
复制代码
复制代码
print(add_item(1))       # [1]
复制代码
print(add_item(2))       # [1, 2]   ← 居然保留了上一次的结果!
复制代码
print(add_item(3, []))   # [3]      ← 显式传入新列表,正常

这是因为默认列表 [] 在函数定义时被创建,所有调用如果不提供 lst 参数,都会使用同一个列表对象。

避免陷阱的方法

通常的做法是:将默认值设为None**,在函数内部创建新对象** 。

python

复制代码
def add_item(item, lst=None):
复制代码
    if lst is None:
复制代码
        lst = []
复制代码
    lst.append(item)
复制代码
    return lst
复制代码
复制代码
print(add_item(1))       # [1]
复制代码
print(add_item(2))       # [2]      ← 每次得到新列表
相关推荐
cen__y1 小时前
Linux12(Git01)
linux·运维·服务器·c语言·开发语言·git
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第65题】【JVM篇】第25题:谈谈对 OOM 的认识
java·开发语言·jvm
社交怪人1 小时前
【算平均分】信息学奥赛一本通C语言解法(题号2071)
c语言·开发语言
郭涤生2 小时前
不同主机之间网络通信-以太网连接复习
开发语言·rk3588
山居秋暝LS2 小时前
【无标题】RTX00安装paddle OCR,win11不能装最新的,也不能用GPU
开发语言·r语言
卢锡荣2 小时前
单芯通吃,盲插标杆 —— 乐得瑞 LDR6020,Type‑C 全场景互联 “智慧芯”
c语言·开发语言·计算机外设
Xin_ye100862 小时前
C# 零基础到精通教程 - 第七章:面向对象编程(入门)——类与对象
开发语言·c#
彦为君2 小时前
Agent 安全:从权限提示到沙箱隔离
python·ai·ai编程
AI科技星3 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi