函数的参数传递
1、位置传参:
实参的对应关系与形参的对应关系是按位置来依次对应的
说明:
实际参数和形式参数通过位置进行传递的匹配
实参个数必须与形参个数相同
2、序列传参:
序列传参是只指函数调用过程中,用*将序列拆解后按照为序列传参的方式进行参数传递
说明:
实际上序列传参就是位置传参的衍生,本质上就是位置传参
示例:
def func(a,b,c):
pass
s = (1,2,3)
s1 = [1,2,3]
func(1,2,3) # 位置传参
func(*(1,2,3)) # 序列传参
func(*[1,2,3]) # 序列传参
func(*s) # 序列传参
func(*s1) # 序列传参
关键字传参:
关键字传参是指传参时,按照形参的名称给形参赋值
实参按照名称进行匹配
字典关键字传参:
是指实参为字典,将字典用** 拆分后进行关键字传参
说明:
实际上关键字传参就是字典关键字传参的衍生,本质上就是位置传参
示例:
def func1(a,b,c):
pass
dict = {'a':1,'b':2,'c':3}
func1(a=1,b=2,c=2) # 关键字传参
func1(**{'a':1,'b':2,'c':3}) # 字典关键字传参
func1(**dict) # 字典关键字传参
3、综合传参
说明:
函数传参方式,在确定形参能唯一匹配到相应实参的情况下可以任意组合
传参时先位置传参,后关键字传参
示例:
def func2(a,b,c):
pass
func2(*(1,2),**{'c':3,'d':4}) #综合传参的时候必须先位置后关键字
#func2(**{'a':1,'b':2},*(3,4)) #这个示例就是错误的
# 缺省形参
# 缺省参数必须自右至左依次存在,如果一个参数有缺省参数,则右侧的所有参数
# 缺省参数可以有0个或者多个,甚至全部都有缺省参数
def func3(a, b=1,c=2):
pass
# 错误示例 缺省参数必须自右至左依次存在,如果一个参数有缺省参数,则右侧的所有参数
#def func4(a,b=2,c)
# pass
函数的参数
1、位置形参
适合使用位置传参(序列传参)和 关键字传参(字典关键字传参) 以及综合传参
但是传递的参数的个数要保证和形参个数相同
def func4(a,b,c,d):
pass
func4(**{'a':1,'b':2,'c':3,'d':4})
func4(*(1,2),**{'c':3,'d':4})
func4(*(1,2,3,4))
2、星号元组形参:
只适合使用位置位置传参(序列传参),实参的个数可以是任意的
def func5(*args):
pass
func5(1,2,3,4,5,6)
List = (1,2,3,4,5,6,7)
func5(*List)
#func5(**{'b':2,'c':3,'d':4}) #错误
#func6(*(1,2,3,4,5,6),**{'b':2,'c':3,'d':4}) #错误
3、命名关键字形参
只适合使用关键字传参(字典关键字传参)
实参的个数不可以任意,但是各个实参传入的位置可以任意
def func6(*,a,b,c):
pass
dict = {'a':1,'b':2,'c':3}
func6(a=1,b=2,c=3)
func6(**{'a':1,'b':2,'c':3})
func6(**{'b':1,'a':2,'c':3})
func6(**dict)
#func6(1, 2, 3)
4、双星号字典形参
只适合使用关键字传参(字典关键字传参)
实参个数可以任意,位置也可任意
def func7(**args):
pass
dict = {'a':1,'b':2,'c':3,'d':4}
func7(**{'a':1,'c':2,'b':3,'d':4})
func7(**dict)
func7(a=1,b=2,c=4,e=5,t=9)
5、综合形参
形参的形式决定了 实参使用的形式和个数
缺省参数,位置形参,星号元组形参,命名关键字和双星号字典形参可以混合使用 函数参数自左至右的顺序为:顺序不能颠倒
# 位置形参加命名关键字形参
def func8(a,b,*,d,e,):
pass
func8(1,2,d=3,e=4)
# 位置形参,星号元组形参,命名关键字形参
def func9(a,b,*args,f,e):
pass
func9(1,2,3,4,5,6,f=9,e=10)
# 注 位置形参,星号元组形参,命名关键字形参混合使用的时候
# 这种表示方式:def func9(a,b,*args,*,f,e): 是不对的 要把第二个星号去掉
# 位置形参,星号元组形参,命名关键字形参,双星号字典形参
def func10(a,b,*args,e,f,**kwargs):
pass
func10(1,2,35,3,4,e=10,f=11)
func10(1,3,7,2,**{'e':8,'f':11,'d':4,'r':5})
func10(1,3,7,2,**{'f':11,'e':8,'d':4,'r':5})
func10(1,3,7,2,**{'d':4,'r':5,'f':11,'e':8})