Python3 函数的形参和实参

函数的参数传递


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})

 

猜你喜欢

转载自blog.csdn.net/qq_26948143/article/details/88144141