python函数的参数


1、形参和实参

函数的参数分为形式参数和实际参数:
  形式参数:形式参数是在定义函数时在函数括号中申明的参数,简称形参,相当于变量名。
  实际参数:实际参数是在调用函数时传入的值,简称实参,相当于变量值。’

python命令参数 python 函数参数说明_函数调用


形参和实参的关系:


  在调用阶段,实参(变量值)会绑定给形参(变量名)。


  这种绑定关系只能在函数体内使用。


  实参与形参的绑定关系在函数调用时生效,函数调用结束后解除绑定关系。


形参的形式:


  位置参数


  默认参数


  可变长位置参数


  可变长默认参数


  命名关键字参数


实参的形式:


  位置参数


  默认参数

2、实参

2.1 位置实参

位置实参:在函数调用阶段, 按照从左到右的顺序依次传入的值。特点:按照顺序与形参一一对应。

def func(x,y,z):
    pass
    
func(1,2,3)
# 1,2,3这种形式位置实参。

2.2、关键字实参

关键字实参:在函数调用阶段,按照key=value的形式传入的值。特点:指名道姓给某个形参传值,可以完全不参照顺序。

def func(x,y,z):
    pass
    
func(x=1,y=2,z=3)
func(y=1,x=2,z=3)

# x=1,y=2,z=3这种形式关键字实参。
# y=1,x=2,z=3这种形式关键字实参。

3、形参

3.1 位置形参

位置参数:按照从左到右的顺序依次定义的参数称之为位置参数。
位置形参:在函数定义阶段,按照从左到右的顺序直接定义的"变量名。
  特点:必须被传值,多一个不行少一个也不行```

def func(x,y,z):	# x,y,z是位置形参
        c = x + y + z
    return c
    
num = func(1,2,3)	# 位置实参传参
print(num)      # 6

num1 = func(x=1,z=3,y=2)	# 关键字实参传参
print(num1)     # 6

3.2 默认形参

默认形参:在定义函数阶段,就已经被赋值的形参,称之为默认参数。
特点:在定义阶段就已经被赋值,意味着在调用阶段可以不用为其赋值。
注:默认形参虽然在函数定义阶段就指定了一个值,但是默认值尽量不用可变类型数据,如:列表,字典等。这个是约定成俗,不是硬性要求。

def func(x=5):		# x=5是默认形参
    c = 1 +x
    return c

num = func()    # 不传任何实参
print(num)      # 6

num1 = func(10) # 位置实参传参
print(num1)     # 11

num1 = func(x=10)   # 关键字实参传参
print(num1)     # 11
# 当默认参数需要用可变类型数据时
def func(x,y,l=None):
    if l is None:
        l = []
    l.append(x)
    l.append(y)
    return l

lis1 = func(1,2)
print(lis1)     # [1, 2]

lis2 = func(4,5,[9,1])
print(lis2)     # [9, 1, 4, 5]

3.3 可变长度的位置参数’*’

形参名:用来接收溢出的位置实参,溢出的位置实参会被*保存成元组的格式然后赋值紧跟其后的形参名*后跟的可以是任意名字,但是约定俗成应该是args

# n个数相加
def func(x,y,*args):
    sum = x + y
    for i in args:
        sum += i
    return sum

sum1 = func(1,2)
print(sum1)     # 3

sum2 = func(1,2,5,6,3,2)
print(sum2)     # 19

3.4 可变长度的关键字参数’**’

**形参名:用来接收溢出的关键字实参,**会将溢出的关键字实参保存成字典格式,然后赋值给紧跟其后的形参名**后跟的可以是任意名字,但是约定俗成应该是kwargs

# 返回一个字典
def func(dic=None,**kwargs):
   if dic is None:
       dic = {}
   dic.update(kwargs)
   return dic

dic1 = func(x=1,y=2,z=3)
print(dic1)     # {'x': 1, 'y': 2, 'z': 3}

dic = {'name':"gsf",'age':18}
dic2 = func(dic,sex="男",height=168,kg=54)
print(dic2)     # {'name': 'gsf', 'age': 18, 'sex': '男', 'height': 168, 'kg': 54}

3.5 命名关键字参数

命名关键字参数:在定义函数时,*后定义的参数,如下所示,称之为命名关键字参数特点:命名关键字实参必须按照key=value的形式为其传值

def func(x,y,*,a,b):
    return x + y + a + b

sum1 = func(1,2,a=1,b=2)
print(sum1)     # 6

3.6 形参的组合使用

组合使用是将位置参数、默认参数、可变长参数等的混合使用

# 位置参数必须在默认参数前面
def func(x,y=1):
    return x+y
sum1 = func(1)
print(sum1)  # 2

# 可变长位置参数必须在位置参数和默认参数之前
def func(x,y=2,*args):
    return x+y+sum(args)
sum2 = func(1,2,3,4,5,6)
print(sum2)     # 21

# 命名关键字参数必须在位置参数、默认参数之前、可变长位置参
def func(x,y=2,*args,a,b):
    return x+y+sum(args)+a+b
sum3 = func(1,2,3,4,5,6,7,a=8,b=9)
print(sum3)   # 45

# 可变长默认参数必须在位置参数、默认参数之前、可变长位置参数、命名关键字参数
def func(x,y=2,*args,**kwargs):
    sums = x + y + sum(args)
    for k,v in kwargs.items():
        sums += kwargs[k]
    return sums
sum4 = func(1,2,3,4,5,6,7,a=8,b=9)
print(sum4)     # 45

def func(x,y=2,*args,a,**kwargs):
    sums = x + y + sum(args) + a
    for k,v in kwargs.items():
        sums += kwargs[k]
    return sums
sum3 = func(1,2,3,4,5,6,a=7,b=8,c=9)