126-函数的参数进阶
形参、实参
形参:在函数定义时,所编写的参数就称之为形式参数(本质是个局部变量)
实参:在函数调用时,所传递的参数就称之为实际参数
函数调用的参数
位置参数、关键词参数
# 2、在函数调用时,函数一共有3个参数,所以调用时也需要传递3个参数,但是传递过程中有两种传递方式:①位置传参②关键词传参
#①位置传参,根据函数定义时参数的位置传递参数的值(强调参数的位置,顺序不能颠倒)
func('Tom',23,'10086')
#②关键词传参,根据”参数=值"方式来实现对参数的传递,优势:不需要考虑位置关系,只要参数名称没错,任何位置都可以
func(name='Jack', mobile='10010', age=19)
函数定义时参数的类别
在Python代码中,函数定义时的参数一共有3种类别:
- 普通参数,如
def func(name,age,mobile)
- 缺省参数(默认值参数),如
def func(name,age,gender='male')
- 不定长参数,如
def func(*args,**kwargs)
不定长参数
不定长参数也叫可变参数。用于不确定调用的时候会传递多少个参数(不传参也可以)的场景。
此时,可用包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会显得非常方便。
*args
:不定长位置参数(不定长元组参数),*args
代表固定格式,args
代表变量的名称,可以接受列表形参(看下面的面试题)
def func(*args): # 接收的是元组
print(args)
func(1, 2, 3) # 输出的是(1, 2, 3)
**kwargs
:不定长关键词参数(不定长字典参数),**kwargs
代表固定格式,kwargs
代表变量名称,主要用于接收不定长关键词参数,可以接受字典形参(看下面的面试题)
关键词参数
def func(**kwsrgs):
print(kwargs)
func(a=1, b=2, c=3) # 输出的是字典{'a':1,'b':2,'c':3}
不定长参数应用场景
在实际Python开发工作中,*args
与**kwargs
还可以结合在一起使用!
注意事项:*args
必须放在左边,**kwargs
必须放在右边
def func(*args,**kwargs):
print(args)
print(kwargs)
func(1, 2, 3, a=4, b=5)
面试题
#需求:请封装一个函数,用于接收List1与dict1的值,然后对其进行求和操作,函数最终返回结果为1+2+3+4+5
def func(*args,**kwargs):
sum = 0
for i in args:
SUm += i
for value in kwargs.values():
sum += value
print(sum)
list1=[1,2,3]
dict1={'a':4, 'b':5}
func(*list1,**dict1)
参数混用
普通参数、缺省参数、不定长参数的混用,必须按顺序使用
①普通参数
②*args
③缺省参数
④**kwargs
def func(①普通参数②*args③缺省参数④**kwargs)
混用情况的省略参数必须用关键词方式赋值
def func(a, b, *args, c=4, **kwargs):
func(1,2, 3, c=100, d=5,e=6)