1.先介绍一下python函数的参数
有两种,形参和实参。
形参是函数定义的时候,括号里面的参数
实参是函数调用的时候,实际传递的参数
2.形参的分类
-
位置参数,其中a,b,c是位置参数
-
def func1(a,b,c): print(a+b+c)
-
默认参数,注意默认参数要放在位置参数后
-
def func2(a,b,c=1): print(a+b+c)
-
动态参数
-
*args,表示接受所有的位置参数的动态传参
-
**args,表示接受关键字的动态传参,接收到的所有传参,被处理成字典
顺序:位置参数,*args,关键字参数,**args
-
-
def func3(a,b,c=1,*args,**argss): print(a+b+c) print(*args,**argss)
3.实参的类型
-
位置参数,按照位置的顺序传参
-
def func1(a,b,c): print(c,b,a) #只能输入3个参数,多了少了会报错 #此时按照位置进行传参,a=1,b=2,c=3 func1(1,2,3) #打印3 2 1
-
关键字参数,按照参数的名字进行传递
-
def func2(a,b,c=1): print(a,b,c) #关键字实参的顺序可以调整,只要同函数的形参的变量名对应上即可 func2(b=5,a=6,c=2) #打印6 5 2 #有默认值的变量可以不传 func2(b=5,a=6) #打印6 5 1
-
混合参数
顺序:位置参数必须放前面,关键字参数放后面。
-
def func3(a,b,c=1,*args,**argss): print(a,b,c) print(args,argss) func3(1,2,3,4,5,6,7,d=5,e=6,f=7) #输出 1 2 3 (4,5,6,7) {'d':5,'e':6,'f':7} #原理,先位置参数,a=1,b=2,c=3 ,然后多出来的位置参数作为元组传给arg #多出来的关键字参数传给argss #函数用来接收不确定个数和类型的变量,就可以采用这种方式 #不传多的参数 func3(1,2,3) #输出 1 2 3 (){}
总结*号的用途:
1.如果是在形参的位置,只能最后一个参数使用。代表可以传多个数据,先分配给函数的位置参数,后面多参数的会被当成一个元组
2.如果是在实参的位置,使用*(元组变量),那么会将这个变量中的每一个数据当做一个参数
def func(a,b,c):
print(a,b,c)
list=[1,2,3]
#将list中的元素当做元组的方式传递
func(*list)
#输出1 2 3
dictc={'a':1,'b':2,'c':3}
func(*dictc)
#把字典的键当做元组传入函数,输出字典的键 a,b,c
总结**号的用途,
1.如果是在形参的位置,只能最后一个参数使用,传入的实参是键值对格式,传入后被当成一个字典
2.如果是在实参的位置,需要使用**(字典变量),代表传入的参数为一个字典类型,可以直接传
字典格式的数据a:1,b:2,也可以使用a=1,b=2这样的键值对来传入,实参不需要放在最后