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]      ← 每次得到新列表
相关推荐
用户8356290780511 小时前
用 Python 自动化 PowerPoint 演讲者备注添加
后端·python
黄忠7 小时前
01-系统架构设计-LangGraph状态机与多源异构RAG
python
zzzzzz3107 小时前
假如我是掘金管理员,我先给评论区装个'代码审查'系统
python·程序员·机器人
砍材农夫7 小时前
python环境|conda安装和使用(2)
后端·python
程序员龙叔20 小时前
编写高质量 Skill 系列 -- 如何设计需求分析与用例生成的 SKILL
自动化测试·软件测试·python·软件测试工程师·接口测试·性能测试·skill·ai测试
用户8356290780511 天前
使用 Python 操作 Word 内容控件
后端·python
LDR0061 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术1 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园1 天前
C++20 Modules 模块详解
java·开发语言·spring
swordbob1 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio