Python-函数传参

函数定义和调用

def语句定义函数

def 函数名(参数列表):

  函数体(代码块)

  【return 返回值】

python的函数没有return语句,会隐式返回一个None值。

定义中的参数列表成为形式参数,只是一种符号表达,简称形参

 

函数的调用

调用方式,函数名加上小括号,括号内写上实参。

调用时写的参数是实际参数,简称实参

 

函数参数

参数调用时传入的参数要和定义的参数个数相匹配。

  • 位置参数

def(x,y,z)  调用使用f(1,2,4)

-----按照参数定义顺序传入实参

  • 关键字参数

def(x,y,z) 调用使用f(x=1,y=2,z=3) 或者f(z=3,x=1,y=2)

----使用形参的名字来写入实参的方式,如果使用了形参名字,那么传参顺序就可以和定义顺序不同

传参要求位置参数必须在关键字参数之前传入,位置参数是按位置对应的。

 

函数参数默认值

定义时,在形参后跟一个值。

def add(x=4,y=5):

  return x+y

 

def add(x=4,y):  #没有缺省值的需要放前面。

  return x+y

 

可变参数

一个形参可以匹配任意个数。

位置参数的可变参数

def add(*nums):
    sum=0
    print(type(nums))
    for x in nums:
        sum=sum+x
    return sum
print(add(3,6,9))

 

<class 'tuple'>
18

在形参前使用*表示该形参是可变参数,可以接收多个实参。

收集多个实参为一个tuple.

关键字参数的可变参数

1 def showconfig(**kwargs):
2     for k,v in kwargs.items():
3         print("{}={}".format(k,v))
4 print(showconfig(x=2,y=3))

x=2
y=3

形参前使用**符号,表示可以接收多个关键字参数。

收集的实参名称和值组成1个字典。

可变参数的混合使用

 

总结

有位置可变参数和关键字可变参数;

位置可变参数在形参前使用*,关键字可变参数在形参前使用**;

位置可变参数和关键字可变参数都可以收集若干个实参,位置可变参数收集形成1个tuple,关键字可变参数收集形成1个dict;

混合使用参数的时候,可变参数要放到参数列表的最后。普通参数需要放到参数列表前面,位置可变餐宿要放到关键字可变参数之前。

 

keyword-only参数(python3加入)

如果在一个*后,或者一个位置可变参数后出现的普通参数,实际上不是普通的参数了,而是keyword-only参数。

1 def foo(*args,x):
2     print(args)
3     print(x)
4 foo(3,5)  #报错,foo() missing 1 required keyword-only argument: 'x',相当于args已经截获了所有的位置参数,
5 foo(3,5,7) #报错
6 foo(3,5,x=7)

 

def(**kwagrs,x) #报语法错误,可以理解为kwargs会截获所有与的关键字参数,就算是写了x=5,x也永远得不到这个值。

 

def fn(*,x,y)

  print(x,y)

fn(x=5,y=6)

*之后,普通参数都变成了必须给出的keyword-ony参数。

 

可变参数和参数默认值

1 def fn(*args,x=5):
2     print(x)
3     print(args)
4 
5 fn()
6 fn(6)
7 fn(x=6)
8 fn(1,2,3,x=10)

 

 1 def fn(y,*args,x=5):
 2     print("x={},y={}".format(x,y))
 3     print(args)
 4 
 5 fn()  #缺失位置参数y
 6 fn(5)
 7 fn(x=6) #缺失位置参数y
 8 fn(1,2,3,x=10)
 9 fn(y=17,2,3,x=10) #位置参数要放到关键字参数前面
10 fn(1,2,y=3,x=10) #重复给y赋值

 

1 def fn(x=5,**kwargs):
2     print('x={}'.format(x))
3     print(kwargs)
4 
5 fn(y=6,x=8)
6 fn(5,y=7)

函数参数

参数规则

参数列表一般顺序是普通参数,缺省参数,可变位置参数,keyword-only参数(可带缺省值),可变关键字参数。

def fn(x,y,z=3,*args,m=4,n,**kwargs)

 

posted on 2019-09-06 11:24  Null_Bug  阅读(1144)  评论(0编辑  收藏  举报

导航