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]      ← 每次得到新列表
相关推荐
小白学大数据2 小时前
拼多多反爬对抗实战:Scrapy 中间件化采集架构解析
开发语言·scrapy·中间件·架构
学逆向的2 小时前
win32注入代码
开发语言·网络安全·api·win32
MoRanzhi12033 小时前
第 3 篇 · 数据清洗与特征工程:从问题判定到特征构建
python·pandas·数据清洗·特征工程·缺失值处理·异常值检测·特征编码
Sarvartha3 小时前
内部类知识
java·开发语言
刘科领3 小时前
使用ollama & openweb-ui 本地搭建自己的AI
人工智能·python·ui·ai
专业程序开发源3 小时前
flask家电故障预测系统92491-计算机课程设计/毕业设计
vscode·python·sql·算法·flask·课程设计
夜雪一千3 小时前
Python 生成模拟地址数据:Faker之外的备选库
网络·windows·python
半亩码田3 小时前
C#转Python第4.8篇:正则表达式:Python re 模块 vs C# System.Text.RegularExpressions
python·正则表达式·c#
夜雪一千3 小时前
如何取消PyCharm自动识别test开头文件并进入测试模式
ide·python·pycharm
yi0113 小时前
LeetCode 643. 子数组最大平均数 I|从暴力枚举到滑动窗口
人工智能·笔记·python·算法·leetcode·滑动窗口