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]      ← 每次得到新列表
相关推荐
forEverPlume19 小时前
golang如何实现日志按级别过滤_golang日志按级别过滤实现教程
jvm·数据库·python
我命由我1234520 小时前
JavaScript 开发 - 获取函数名称、获取函数参数数量、获取函数参数名称
开发语言·前端·javascript·css·html·html5·js
白晨并不是很能熬夜20 小时前
【PRC】第 2 篇:Netty 通信层 — NIO 模型 + 自定义协议 + 心跳
java·开发语言·后端·面试·rpc·php·nio
简简单单就是我_hehe20 小时前
后端链路追踪局部采集和全量采集配置说明
java·开发语言
北京理工大学软件工程20 小时前
C#111
开发语言·c#
m0_6245785921 小时前
MySQL主从复制支持跨版本吗_不同版本间同步的注意事项
jvm·数据库·python
yuanpan21 小时前
Python Pygame 入门教程:从零学会创建窗口、绘图和游戏交互
python·游戏·pygame
2401_8714928521 小时前
如何在 React Router v6 中正确配置多路由组件显示
jvm·数据库·python
叶子野格21 小时前
《C语言学习:指针》12
c语言·开发语言·c++·学习·visual studio
光影少年21 小时前
前端线上屏幕出现卡顿如何排查?
开发语言·前端·javascript·学习·前端框架·node.js