126-函数的参数进阶

形参、实参

形参:在函数定义时,所编写的参数就称之为形式参数(本质是个局部变量
实参:在函数调用时,所传递的参数就称之为实际参数

函数调用的参数

位置参数、关键词参数

# 2、在函数调用时,函数一共有3个参数,所以调用时也需要传递3个参数,但是传递过程中有两种传递方式:①位置传参②关键词传参
#①位置传参,根据函数定义时参数的位置传递参数的值(强调参数的位置,顺序不能颠倒)
func('Tom',23,'10086')
#②关键词传参,根据”参数=值"方式来实现对参数的传递,优势:不需要考虑位置关系,只要参数名称没错,任何位置都可以
func(name='Jack', mobile='10010', age=19)

函数定义时参数的类别

在Python代码中,函数定义时的参数一共有3种类别:

  1. 普通参数,如def func(name,age,mobile)
  2. 缺省参数(默认值参数),如def func(name,age,gender='male')
  3. 不定长参数,如def func(*args,**kwargs)

不定长参数

不定长参数也叫可变参数。用于不确定调用的时候会传递多少个参数(不传参也可以)的场景。
此时,可用包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会显得非常方便。

def func(*args):  # 接收的是元组
	print(args)
func(1, 2, 3)  # 输出的是(1, 2, 3)
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)