参数顺序别乱来,调用时容易踩坑
写函数的时候,参数的顺序不是随便排的。比如你写了个格式化日期的函数,把年份放在第三个参数,月份放第一个,调用的时候光看数字很容易搞混。时间一长,自己回头看都得愣一下。建议把最常用的、必填的参数往前放,可选的往后靠,别人用起来也顺手。
默认值要设得合理,别图省事留坑
给参数设默认值本是好习惯,但有些人图方便直接用可变对象,比如在 Python 里这么写:
def add_item(item, target_list=[]):
target_list.append(item)
return target_list
看着没问题,实际运行你会发现,每次不传列表时,用的都是同一个 list 对象,数据会累积。正确的做法是用 None 判断:
def add_item(item, target_list=None):
if target_list is None:
target_list = []
target_list.append(item)
return target_list
别把参数当变量乱改
有些语言里,函数参数传的是引用,你在函数内部直接修改它,外面的原始数据也会受影响。比如 JavaScript 传一个对象进去,你一通操作 delete、add,外面再用这个对象时发现少了几个字段,查半天才发现是函数动了手脚。该复制就复制,别偷懒。
命名要有意义,别用 a、b、c 应付
见过有人写函数参数叫 param1、param2,调用的时候完全不知道哪个是干啥的。就像寄快递,地址写“那个楼旁边”,谁看得懂?参数名要能一眼看出用途,比如 user_id、timeout_seconds,清楚明白。
参数太多时考虑用对象或配置项
如果一个函数参数超过四五个,尤其是布尔类型的,像 is_urgent、show_header、auto_save、debug_mode 堆在一起,调用时光看那一串 true、false 根本记不住对应什么。这时候不如把这些打包成一个配置对象:
config = {
'is_urgent': True,
'show_header': False,
'auto_save': True
}
process_data(data, config)
代码清晰多了,也方便以后扩展。
文档里记得写清楚每个参数的用途
哪怕只是给自己看的脚本,加个注释也不费劲。IDE 能自动提示类型和说明,前提是你要写。比如用 JSDoc 或 Python 的 docstring,别人(包括几个月后的你)一看就知道怎么用,不用钻进函数体一行行猜。