写程序的时候,经常要调用函数。有时候同一个函数在不同地方用,大部分参数都一样,只有个别不一样。每次都重复写一长串参数,不仅麻烦,还容易出错。这时候,函数调用默认参数就派上用场了。
什么是默认参数
默认参数就是在定义函数时,给某些参数预先设定一个“默认值”。如果调用函数时没有传这个参数,就会自动使用这个默认值。
比如你写个发消息的函数:
def send_message(text, mode="normal"):
if mode == "urgent":
print("【紧急】" + text)
else:
print("【普通】" + text)
这里 mode 的默认值是 "normal"。调用的时候如果不写,就按普通消息处理:
send_message("开会时间改到下午3点")
# 输出:【普通】开会时间改到下午3点
send_message("服务器宕机!", "urgent")
# 输出:【紧急】服务器宕机!
实际场景中的好处
想象你在做一个小工具,用来生成员工报告。大多数员工都是正式工,只有少数是实习生。你可以这样设计函数:
def generate_report(name, employee_type="正式员工"):
print(f"{name} - {employee_type} - 本月绩效:良好")
平时调用只需要写名字:
generate_report("张伟")
# 输出:张伟 - 正式员工 - 本月绩效:良好
遇到实习生才特别说明:
generate_report("李娜", "实习生")
这样既省事,又不容易漏填。
注意事项
默认参数虽然方便,但也有坑。最常见的是用可变对象(比如列表或字典)当默认值:
def add_item(item, my_list=[]):
my_list.append(item)
return my_list
看起来没问题,但连续调用你会发现列表一直在累加:
print(add_item("A")) # ['A']
print(add_item("B")) # ['A', 'B']
这是因为默认参数只在函数定义时初始化一次。正确的做法是:
def add_item(item, my_list=None):
if my_list is None:
my_list = []
my_list.append(item)
return my_list
这样每次调用就不会互相干扰了。
学会用默认参数,能让代码更干净,也更容易维护。尤其在写一些常用功能函数时,合理设置默认值,能省下不少重复劳动。