Python函数-形参传入语法浅析

发布时间:2026/10/24 11:25:32

Python函数-形参传入语法浅析 文章目录前言一、函数定义语法二、形参类型汇总表三、最常用的参数类型重要四、进阶用法了解五、注意事项六、快速查询表七、小结前言在Python中函数的形参参数非常灵活。本文系统性地总结Python函数可以接收的所有参数类型从最常用的基础类型到进阶的高级用法配有大量代码示例方便日后查阅。一、函数定义语法def函数名(形参1,形参2默认值,*args,**kwargs):文档字符串可选函数体return返回值# 可选二、形参类型汇总表三、最常用的参数类型重要基本数据类型defprocess(name,age,price,is_active):处理基本数据类型print(f姓名:{name}, 年龄:{age}, 价格:{price}, 状态:{is_active})#调用示例process(Tom,18,99.9,True)列表 Listdefcalculate_total(prices):计算列表总和returnsum(prices)# 调用示例resultcalculate_total([10,20,30,40])print(result)# 输出: 100字典 Dictdefshow_user_info(user):显示用户信息print(f姓名:{user[name]}, 年龄:{user[age]}, 城市:{user.get(city,未知)})# 调用示例show_user_info({name:Tom,age:18,city:北京})默认参数defcreate_user(name,age18,city北京):带默认参数的函数print(f{name},{age}岁, 来自{city})# 调用示例create_user(Tom)# Tom, 18岁, 来自北京create_user(Jerry,20)# Jerry, 20岁, 来自北京create_user(Spike,25,上海)# Spike, 25岁, 来自上海实例化的对象classUser:def__init__(self,name,age):self.namename self.ageagedefintroduce(self):returnf我是{self.name}今年{self.age}岁defgreet(user):接收对象作为参数print(f你好,{user.name})print(user.introduce())# 调用示例tomUser(Tom,18)greet(tom)#输出结果你好,Tom 我是Tom今年18岁函数本身回调函数defapply_operation(data,func):对数据应用指定的操作函数returnfunc(data)# 调用示例传入不同的函数print(apply_operation([1,2,3],sum))# 输出: 6print(apply_operation([1,2,3],len))# 输出: 3print(apply_operation(hello,str.upper))# 输出: HELLOprint(apply_operation(5,lambdax:x*2))# 输出: 10可变参数 *argsdefsum_all(*args):接收任意数量的位置参数print(f参数元组:{args})returnsum(args)# 调用示例print(sum_all(1,2,3))# 输出: 6print(sum_all(10,20,30,40))# 输出: 100print(sum_all())# 输出: 0可变参数 **kwargsdefshow_info(**kwargs):接收任意数量的关键字参数forkey,valueinkwargs.items():print(f{key}:{value})# 调用示例show_info(nameTom,age18,city北京,job工程师)# 输出:# name: Tom# age: 18# city: 北京# job: 工程师混合使用defmixed_params(a,b10,*args,**kwargs):混合使用各种参数类型print(f必传参数 a:{a})print(f默认参数 b:{b})print(f额外位置参数 args:{args})print(f额外关键字参数 kwargs:{kwargs})returnab# 调用示例mixed_params(1,2,3,4,5,x6,y7)# 输出:# 必传参数 a: 1# 默认参数 b: 2# 额外位置参数 args: (3, 4, 5)# 额外关键字参数 kwargs: {x: 6, y: 7}四、进阶用法了解传入类本身classWarrior:defattack(self):return战士挥剑攻击classMage:defattack(self):return法师释放火球defstart_game(player_class):传入类本身在函数内部实例化playerplayer_class()print(f你选择了{player_class.__name__})print(player.attack())# 调用示例start_game(Warrior)# 你选择了 Warrior / 战士挥剑攻击start_game(Mage)# 你选择了 Mage / 法师释放火球实战场景批量创建对象classUser:tableusersdefsave(self):print(f保存到{self.table}表)classProduct:tableproductsdefsave(self):print(f保存到{self.table}表)defbatch_create(model_class,data_list):批量创建并保存对象objs[]fordataindata_list:objmodel_class()forkey,valueindata.items():setattr(obj,key,value)# 动态设置属性obj.save()objs.append(obj)returnobjs# 调用示例batch_create(User,[{name:Tom},{name:Jerry}])batch_create(Product,[{name:iPhone,price:999},{name:Mac,price:1999}])传入模块对象# 假设有不同支付模块# pay_alipay.pydefpay(amount):returnf支付宝支付{amount}元# pay_wechat.pydefpay(amount):returnf微信支付{amount}元defcheckout(pay_module,amount):传入模块对象动态选择支付方式returnpay_module.pay(amount)# 调用示例假设已导入模块importpay_alipayimportpay_wechatprint(checkout(pay_alipay,100))# 支付宝支付 100 元print(checkout(pay_wechat,200))# 微信支付 200 元配套工具函数# getattr: 动态获取属性userUser()user.nameTomprint(getattr(user,name,默认值))# Tom# setattr: 动态设置属性setattr(user,age,18)# 等价于 user.age 18# hasattr: 判断是否有该属性print(hasattr(user,name))# Trueprint(hasattr(user,address))# False五、注意事项可变对象作为默认参数常见陷阱# ❌ 错误写法defadd_item(item,lst[]):lst.append(item)returnlstprint(add_item(1))# [1]print(add_item(2))# [1, 2] ← 期望 [2]但实际继承了上次的结果# ✅ 正确写法defadd_item(item,lstNone):iflstisNone:lst[]lst.append(item)returnlstprint(add_item(1))# [1]print(add_item(2))# [2]参数顺序规则defcorrect_order(a,b10,*args,**kwargs):# 顺序必传参数 → 默认参数 → *args → **kwargspass# ❌ 错误顺序defwrong_order(a,*args,b10):# 语法错误pass六、快速查询表七、小结1.90%的情况你只需要传递数字、字符串、列表、字典、对象、带默认值的参数2.*args和**kwargs 在处理不确定数量的参数时非常有用3.传入类本身和传入模块对象是进阶技巧在框架开发、插件系统中很常见4.Python函数形参的核心思想一切皆对象任何对象都可以作为参数传递参考资料Python官方文档https://docs.python.org/3/tutorial/controlflow.html#defining-functions
延伸阅读

更多相关文章

2026/10/22 21:17:53

AI竞争转向应用生态构建:从技术军备到开发者赋能

上周,OpenAI 组织了一场面向内容创作者的线下活动,这在社区里引发了一些讨论。很多人第一反应是:一个以技术驱动著称的AI公司,怎么突然搞起了“网红营销”?这背后到底是在传递什么信号?如果你只把它看作一次…

2026/10/24 9:22:57

不用付费存储!Linux NFS 实现多服务器文件实时共享

一、NFS基础介绍 1.1 NFS定义 NFS(Network File System,网络文件系统)是Sun公司开发的跨平台文件共享协议,客户端可像访问本地目录一样读写远程服务器共享文件夹,广泛用于集群统一存储、企业内网文件共享。 1.2 NFS版本…

2026/10/24 15:04:47

基于SimPEG的地下水数值模拟实战:从跑通到二次开发

简介:这份资源面向地球物理、水文地质及环境工程领域的学习者与研究人员,提供基于开源 Python 库 SimPEG 子模块 SimPEG.FLOW 编写的地下水流方程示例工程,用于理解达西定律下的正向模拟与参数反演流程。压缩包共 20 个文件,约 45…

2026/10/24 14:59:46

Java营业厅工程:用Swing与文件持久化学习分层业务架构

简介:一份基于Java技术的移动端应用开发案例,围绕“嗖嗖移动大厅”的登录、服务浏览与交互功能展开,特别适合Java Web初学者、课程设计者以及需要借助注释理解代码逻辑的开发者。压缩包共1个文件,为单个HTML页面,整体大…

2026/10/24 14:59:46

Intel IPU:重构云数据中心控制平面的硬件确定性引擎

简介:本资源为Intel资深专家臧锐主讲的《Intel IPU在云数据中心中的实践与探索》技术报告PDF,面向云计算架构师、基础设施工程师及高性能数据中心研发人员,聚焦IPU如何应对虚拟化、存储加速、加密压缩与安全隔离等核心挑战。报告深入剖析IPU与…

2026/10/24 14:59:46

基于C++与GTK3的IPS补丁工具实现:解析、应用与避坑指南

简介:基于 GTK3 的 ips-patcher 是一款用 C 写成的 IPS 补丁程序,包含命令行模式与图形界面模式,面向需要给 ROM 或二进制数据打 IPS 补丁的玩家、开发者以及想学习 GTK 编程的初学者。包内共 15 个文件,其中 6 个 cpp 源文件与 4…

2026/10/24 14:59:46

设计模式复习实战指南:从七大原则到重点模式代码落地

简介:这份《大话设计模式复习》文档面向具备一定面向对象编程基础、工作1至3年的研发人员,系统梳理设计模式的核心知识体系。内容从设计模式的定义、分类、特点与应用场景切入,详细讲解单一职责、开放-封闭、依赖倒转、里氏代换、迪米特法则、…

2026/10/24 14:59:46

NetSpot Wi-Fi干扰分析实战:从信道冲突到热力图校准

简介:本资源是一份面向家庭用户与小型办公场景的Wi-Fi网络优化实战指南,聚焦NetSpot这款专业级无线分析工具的全流程使用解析。内容覆盖软件下载安装、Discover模式信号扫描与排序、Graph连续性诊断、Detail频段深度分析(含2.4GHz与5GHz频道规…

2026/10/23 22:56:35

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/24 0:02:40

MATLAB缩进快捷键与批量格式化实战指南

1. 被自动缩进折磨的那些年如果你写过MATLAB代码,大概率经历过这种场景:从某个文档、网页或者聊天记录里复制了一段代码,粘贴进编辑器之后,每一行前面都带着莫名其妙的空格,有的行首是四个空格,有的是一个T…

2026/10/24 0:02:40

用Poco实现Qt风格信号与槽的跨平台C++方案

简介:本资源是一份面向C中级开发者的技术实践工程,聚焦于在非Qt框架环境下模拟实现Qt核心通信机制——信号与槽,借助Poco网络库的事件系统完成解耦式对象通信。适用于需在跨平台C项目中引入松耦合回调机制、但受限于无法集成Qt依赖的开发场景…

2026/10/24 0:02:40

ESXi裸机虚拟化安装指南:从硬件兼容到虚拟机部署

1. 为什么还要折腾ESXi:从一台闲置机器说起手里攒了几台淘汰下来的迷你主机,配置不算差,i5加16G内存,扔了可惜,装个桌面系统又觉得浪费。这种场景下,ESXi就成了一个绕不开的选择。它是一套裸机虚拟化平台&a…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑