python函数之--传参

数学定义:
y=f(x),y是x的函数,x是自变量。y=f(x0,x1,x2,…,xn)

python函数定义与作用
  • 由若干语句组成的语句块、函数名称、参数列表构成,它是组成代码的最小单元
  • 完成一定的功能
  • 封装的目的是为了复用,减少冗余代码
  • 使代码简介美观,可读易懂
  • 定义:
def 函数名(参数列表):
	函数体(代码块)
	[return 返回值]
--------------------------
def fn(x,y):
	sumNumber = x + y
	return sumNumber
函数参数

函数在定义时要约定好形式参数,调用时也提供足够的实际参数,一般来说,形参和实参个数要一致(可变参数除外);

传参方式

1.位置传参
定义时def f(x,y,z),调用使用f(1,4,6),按照参数定义顺序传入实参;
2.关键字传参
定义时def f(x,y,z),调用时用f(x=1,y=2,z=3),使用形参的名字来传入实参的方式,如果使用了形参名字,那么传参顺序可以和定义顺序不同
要求位置参数必须必须在关键字参数之前传入,位置参数是按位置对应的

def f(x,y,z):
	pass
f(z=None,y=10,x=[0])
f((1,),z=6,y=2.1)
f(y=2,z=4,1)#错误传参!
参数缺省值

缺省值也称为默认值,可在函数定义时,为形参增加一个缺省值,其作用:

  • 参数的默认值可以在未传入足够实参的时候,对没有给定的参数赋值为默认值
  • 参数非常多的时候,并不需要每次输入所有参数,简化函数调用
def fn(x=1,y=2):
	return x+y
可变参数

需求:写一个函数,可以对多个数累加求和

def sumNumber(iterable):
	sumNumber = 0
	for i in iterable:
		sumNumber += i
	return sumNumber
sumNumber([1,2,3])
sumNumber(range(4))

上述方法传入可迭代对象,并累加每一个元素,也可以使用可变参数完成上面的函数:

  1. 可变位置参数
  • 在形参前使用*标识该参数是可变位置参数,可以接收多个实参
  • 它将收集来的实参组织到一个tuple中
def sumNumber(*nums):
	sumNumber = 0
	for i in nums:
		sumNumber += i
	return sumNumber
sumNumber(1,2,3)
  1. 可变关键字参数
  • 在形参前使用**标识该参数是可变关键字参数,可以接收多个关键字参数
  • 它将收集来的实参的名称和值组织到一个dict中
def showconfig(**kwargs):
	for k,v in kwargs:
		print('{}={}'.format(k,v),end=',')


showconfig(host='127.0.0.1',port='8080',username='root',password='123')
  1. keyword-only参数
  • 在python3之后,新增了keyword-only参数
  • keyword-only:在形参定义时,在一个可变位置参数之后出现的普通参数,就已经不是普通的参数了,称为keyword-only参数
def fn(*args,x):
	print(x,args)
fn(1,2)#错误传参
fn(3,4,5)#错误传参
fn(1,2,3,x=5)#正确传参

keyword-only参数,就是这个参数必须使用关键字传参,上例中可以理解为,args可变参数收集了所有的位置参数,所有后面的x不可能通过位置传参传入。

总结
  • 可变参数分为可变位置参数和可变关键字参数
  • 可变位置参数前使用一个星号*
  • 可变关键字参数前使用两个星号**
  • 可变参数可以收集若干个实参,可变位置参数形成一个tuple,可变关键字参数行程一个dict
  • 参数混合使用的时候,一般顺序如下:

普通参数、缺省参数、可变位置参数、keyword-only参数(可带缺省值)、可变关键字参数

你可能感兴趣的:(python基础)