Python学习 - 详解python函数的参数
一、参数的定义
1、函数的参数在哪里定义
在python中定义函数的时候,函数名后面的括号里就是用来定义参数的,如果有多个参数的话,那么参数之间直接用逗号,
隔开
案列:
1 2 3 4 | # 利用函数的参数,定义一个可以完成任意两个数相加的函数 def add_num(a,b): c = a + b print (c) |
2、带参数的函数调用:
函数定义了参数,那么调用函数的时候就需要传入参数
1 2 3 | add_num( 11 , 22 ) #运行结果 33 |
而我们调用函数的时候传入的参数叫做实参,形参是用来接收实参的。
二、参数分类
上面我们说了形参和实参,那么形参和实参在在定义和调用的时候,根据形式不同有可以分为几类,
1、根据实参进行分类
实参:位置参数、关键字参数
1.1、位置参数(未命名参数)
1 2 3 4 5 6 7 8 9 10 | def func(a,b,c): print (a) print (b) print (c) add_num( 11 , 22 , 33 ) #运行结果 11 22 33 |
上述案列中,的函数的三个形参是按位置接收传入的实参,我们把这样的传参的形式叫做位置参数,
1.2、关键字参数(命名参数)
1 2 3 4 5 6 7 8 9 10 | def func(a,b,c): print (a) print (b) print (c) add_num( 11 ,c = 99 ,b = 33 ) #运行结果 11 33 99 |
调用函数函数的时候,实参通过参数名指定传给某个形参,这样的传参形式,我们把它叫做关键字参数
注意:传参的时候先写位置参数,再写命名参数
2、根据形参进行分类
形参可以分为三类:必备参数、默然参数、不定长参数
2.1、必备参数:
在调用函数的时候必须要传的参数
1 2 3 4 5 | def add(a,b): c = a + b print (c) add( 11 , 22 ) |
上面函数中的a,b就是必备参数,在调用的函数的时候必须要传,不然就会报错
2.2、默认参数(缺省参数):
调用函数的时候可以传可以不传,不传就用默认值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | def func(a,b,c = 99 ): print (a) print (b) print (c) func( 11 , 22 , 33 ) print ( '-----------' ) func( 55 , 66 ) #运行结果: 11 22 33 - - - - - - - - - - - - - - - 55 66 99 |
通过上述案列中我们可以发现,第一次调用的时候,我们传入了三个参数,c打印出来的是我们传入的值,第二次只传入了两个参数,这个时候c打印出来的是我们定义的时候给它设置的默认值
注意:带有默认值的参数一定要位于参数列表的最后面。
2.3、不定长参数*args
和 **kwargs
调用函数的时候可以传0个或者多个
2.3.1、*args
:接收多传入的位置参数,以元祖的形式保存
1 2 3 4 5 6 7 8 9 | def func( * args): print (args) func( 33 , 44 , 55 , 66 , 77 ) func( * ( 33 , 44 , 55 , 66 , 77 )) #运行结果 ( 33 , 44 , 55 , 66 , 77 ) ( 33 , 44 , 55 , 66 , 77 ) |
*args
,args接收的是一个元祖;
调用的时候可以直接传入:func(33,44,55,66,77)
,
也可以可以先组装list或tuple,再通过*
拆包传入:func(*(33,44,55,66,77))
;
2.3.2、**kwargs
:接收多传入的关键字参数,以字典的形式保存
1 2 3 4 5 6 7 | def func( * * kwargs): print (kwargs) func(e = 33 ,h = 44 ,f = 55 ,d = 66 ,c = 77 ) func( * * { 'e' : 33 , 'h' : 44 , 'd' : 66 , 'c' : 77 }) #运行结果 { 'e' : 33 , 'h' : 44 , 'f' : 55 , 'd' : 66 , 'c' : 77 } { 'e' : 33 , 'h' : 44 , 'f' : 55 , 'd' : 66 , 'c' : 77 } |
**kwargs
,kw接收的是一个字典;
关键字参数既可以直接传入:func(11,22,e=33,h=44,f=55,d=66,c=77)
,
也可以先组装dict,再通过**拆包
传入:func(**{'e':33,'h':44,'d':66,'c':77})
。
注意点:使用*args
和**kwargs
是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2020-01-10 如何通过js获取本机ip?