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

发布时间:2026/11/14 22:37:11

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/11/14 13:53:28

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

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

2026/11/14 16:31:26

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

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

2026/11/14 22:36:31

电工证学历补贴多少 电子证书怎么领 工地人怎么考才不吃亏

电工证学历补贴多少 电子证书怎么领 工地人怎么考才不吃亏 工地太忙根本没时间复习考试,电工证还成了很多人的“心病”。别急,今天就给你说清电工证学历补贴到底有多少,电子证书怎么领,工地人怎么考才不吃亏,还能在洛阳涧西区项目现场当管理员,收入翻…

2026/11/14 22:36:31

维修电工证补助怎么领网上查询最全攻略

维修电工证补助怎么领网上查询最全攻略 你缺证,缺的是上岗资格,缺的是饭碗,缺的是机会。维修电工证不仅是找工作的门槛,更是国家规定的强制性职业准入证明。而很多人在拿到证后,还不清楚怎么领取维修电工证补助,甚至不知道怎么在网上查询自己的证书状态…

2026/11/14 22:36:31

高级电工证属于技师吗内部消息来了!外省证书能不能转过来

高级电工证属于技师吗内部消息来了!外省证书能不能转过来 之前考的证在外省能不能转过来,这是很多电工朋友最关心的问题之一。尤其是现在全国一体化平台上线后,很多人心里没底,怕自己辛苦考的证白费了。其实, 高级电工证是否属于技师 ,以及…

2026/11/14 22:36:31

工地太忙根本没时间复习考试?电工证要多少课时才能上岗必备

工地太忙根本没时间复习考试?电工证要多少课时才能上岗必备 工地太忙根本没时间复习考试?你不是一个人。特别是像你在信阳浉河区项目现场管理这样的岗位,工作节奏快、任务繁重,想要抽空准备电工证考试,真的太难了。但你知道吗?电工证是很多岗位…

2026/11/13 22:33:32

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/14 0:06:39

土木特种工考证官方报名入口怎么找 之前考的证在外省能不能转过来

土木特种工考证官方报名入口怎么找 之前考的证在外省能不能转过来 之前考的证在外省能不能转过来?这个问题我太熟悉了,作为一名干了十几年的特种作业证书办理从业者,每年都会遇到不少像你一样在外地考了证,回来却发现无法直接使用的学员。别急,今天我就…

2026/11/14 0:06:39

电工证要多久多钱保姆级教程:工地太忙根本没时间复习考试

电工证要多久多钱保姆级教程:工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,你不是一个人。在信阳浉河区,很多刚进入工地的电工都面临这样的困境:工作强度大,时间碎片化,根本没有系统复习考试的机会。但电工证是上岗的硬门槛,…

2026/11/13 22:32:11

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/13 12:14:39

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

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

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

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