当前位置: 首页 > news >正文

函数定义、调用、参数分类(位置/关键字/默认参数)避坑详解

博客导语

函数是代码复用的核心,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(age=22,name="王五") # 纯关键字,顺序随意 user_info("赵六",age=25) # 位置+关键字混用,合法 # user_info(age=25,"赵六") 报错:位置参数不能放关键字参数后

2.3 默认参数

定义时直接给形参赋值,调用时不传参自动使用默认值。硬核避坑:默认参数必须放在非默认参数后方

def user_info(name,age=18): 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_list=None): if num_list is None: num_list = [] num_list.append(1) print(num_list)

四、参数混用强制顺序(死记)

位置参数 > 默认参数 > 关键字参数,违反顺序百分百语法报错

http://www.rkmt.cn/news/1526424.html

相关文章:

  • 2026年北京工伤律师推荐怎么选?关键看这三点不踩雷 聚赋推荐 - 本地品牌推荐
  • 法考考试时间安排及科目|时间表|资料已整理
  • WPinternals:突破Windows Phone安全边界的专业技术工具
  • 接口服务里的 A/B Test:从灰度开关到可信实验
  • Dockerfile 深度实战:从指令底层原理到生产级镜像构建的艺术
  • 影刀RPA进阶教程_API调用的进阶实战RESTful鉴权分页与错误处理
  • 美术用品厂主要分布在哪里?国内主要产区概览
  • Citra 3DS模拟器终极指南:在PC上完美重现掌机体验的完整解决方案
  • Python 高手编程系列三十四:抽象语法
  • 2026年6月合肥中高职贯通学校概览,实力院校汇总,职高/机电一体化专业学校/新能源汽车专业学校,中高职贯通学校找哪家 - 品牌推荐师
  • 函数返回值、变量作用域、global关键字深度拆解
  • 相框厂主要分布在哪里?主要产区横向对比
  • 从GPT-1到GPT-4o:一个普通开发者眼中的模型进化与实战选择指南
  • 北京莫瑶教育零基础转行AI工程师(按学习难度分级)|2026就业向全程学习指南 - 教育信息网
  • 如何快速掌握AlienFX控制:开源工具终极指南解锁Alienware设备完全掌控
  • 数据开发半年工作后随感
  • 探索fSpy:解锁静态图像相机匹配的终极指南
  • 饮料厂主要分布在哪里?各产区有什么不同?
  • 3步破解默认密码困局:用Changeme防御企业安全最薄弱环节
  • 如何让旧款Mac免费升级最新macOS?OCLP-Mod完整指南
  • 089、Pre-commit Hooks 与 Claude Code:提交前自动检查、修复与拦截
  • 2026中山中央空调回收品牌价差格力约克大金各值多少 - 广东再生资源回收
  • 2026制药工业吸尘器TOP3品牌评价与推荐 - 工业清洁测评社
  • 如何永久保存你的微信记忆?WeChatMsg让聊天记录成为珍贵数字资产
  • 跨源查询 30 倍提速:衡石 BI 多源异构数据关联技术深度解析
  • 成都钢材供应有限公司|热轧型钢|热轧钢板|热轧钢管|热轧钢筋 - 四川盛世钢联营销中心
  • 影刀RPA新手教程_财务对账自动化银行流水企业账单与Excel差异比对
  • 【CANdelaStudio-从入门到深入到实战】11 例程控制:让ECU学会“边干活边聊天”
  • 一个搬家公司的技术账:我们在广州跑了3200单,攒下这些数据 - 奔跑123
  • 088、GitLab CI 集成:Merge Request 的自动代码审查、建议生成与流水线集成