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]      ← 每次得到新列表
相关推荐
LMT流氓兔16 分钟前
第五单元——第十六课:给书店助手加上网页界面
java·开发语言·jvm·人工智能·oracle·langchain·1024程序员节
专注仿真24 分钟前
梯度提升类(XFBoost)算法详解与代码实例
开发语言·人工智能·python·算法·大模型训练·控制算法
外收内放36 分钟前
Python基础语法练习题(75)
开发语言·python·学习
starzy19901 小时前
Scala循环与判断:一切皆表达式的控制流
开发语言·人工智能·scala
starzy19902 小时前
Scala类和对象:从构造器到样例类的完整指南
开发语言·后端·scala
niucloud-admin2 小时前
NIUCLOUD PHP SAAS上门家政使用文档--服务订单:订单列表
开发语言·php
黑十2 小时前
PyTorch 报 “no CUDA GPUs are available“ 怎么办?3 步排查
服务器·网络·人工智能·pytorch·python
怪我冷i2 小时前
Rust 的impl语法详解
开发语言·后端·rust
threelab2 小时前
开源图片去水印代码
python
qq_406981033 小时前
c++的decltype是什么
开发语言·c++