博客导语函数是代码复用的核心90%新手入门都会踩默认参数、参数混用顺序的坑。本篇从零讲解函数底层执行逻辑区分四类基础参数的传参规则、混用顺序、生产报错案例解决日常开发80%参数传参异常。一、函数基础定义与调用底层逻辑1.1 标准语法# 函数定义 def 函数名(参数列表): 函数文档注释 函数体代码 # 函数调用 函数名(传入参数)1.2 底层执行流程Python解释器读取def语句时不会执行内部代码只会在内存中创建函数对象、分配内存地址只有调用函数时才会开辟独立函数栈帧执行内部代码调用结束后销毁栈帧。这也是为什么函数必须先定义、后调用颠倒顺序直接抛出NameError。二、三大基础参数全解析易错点2.1 位置参数必选参数按照参数定义顺序一一对应传参数量、顺序必须完全匹配多传少传都会直接报错。是开发最常用的参数类型。def user_info(name,age): print(f姓名:{name},年龄:{age}) # 正确位置一一对应 user_info(张三,20) # 错误参数数量不匹配 user_info(李四)2.2 关键字参数通过形参名实参传参无需遵循定义顺序适合参数数量多、容易记混顺序的场景。硬性规则关键字参数必须放在位置参数之后不能颠倒。user_info(age22,name王五) # 纯关键字顺序随意 user_info(赵六,age25) # 位置关键字混用合法 # user_info(age25,赵六) 报错位置参数不能放关键字参数后2.3 默认参数定义时直接给形参赋值调用时不传参自动使用默认值。硬核避坑默认参数必须放在非默认参数后方。def user_info(name,age18): print(f姓名:{name},年龄:{age}) user_info(小明) # 不传age默认18 user_info(小红,20) # 手动覆盖默认值三、高频致命坑可变类型默认参数全网最高频面试坑默认参数为列表、字典等可变对象时只会在函数定义时创建一次后续调用会复用同一块内存导致数据累加。# 错误写法 def add_num(num_list[]): num_list.append(1) print(num_list) add_num() # [1] add_num() # [1,1] 不符合预期 # 正确写法默认值用None内部初始化可变对象 def add_num(num_listNone): if num_list is None: num_list [] num_list.append(1) print(num_list)四、参数混用强制顺序死记位置参数 默认参数 关键字参数违反顺序百分百语法报错