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

发布时间:2026/9/27 1:21:39

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/9/25 13:22:34

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

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

2026/9/26 18:50:50

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

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

2026/9/27 1:20:49

C语言switch case用法详解:从语法规则到工程实践

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

2026/9/27 1:20:49

3GPP R18关键特性与工程落地:RedCap、NTN、1024QAM参数解析

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

2026/9/27 1:20:49

高德导航为何带你走错路?从路网更新到楼栋定位精度全解析

1. 导航依赖与“盲从”:一个真实用户的困境1.1 从一次“违章走错路”说起先说个我自己的例子。有天晚上去一个没去过的科技园接人,天气不太好,视线本来就差。高德地图让我“前方右转”,我下意识地打方向,结果右转后直接…

2026/9/27 1:20:49

嵌入式开发基础设施三支柱:调试、构建、交付的可信闭环

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

2026/9/27 1:15:49

YOLOv8源码包实操:环境搭建、数据集转换与模型训练全指南

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

2026/9/27 0:00:45

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/27 0:00:45

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:45

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/27 0:00:45

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/27 0:00:45

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:45

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/25 20:55:38

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/26 19:58:38

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/25 18:34:56

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

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

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

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