一、形式参数(parameter)与实际参数(argument)
形式参数是指在函数中函数创建和定义过程中, 函数名后面括号里的参数。只是代表一个位置、一个变量名。
【我的理解:用特定的符号代指参数,但其本身没有值,不参加运算。】
实际参数是指在函数在调用过程中传入的参数。【我的理解:函数运算中会传入实际数值,并产生相应的运算结果。】
比如:>>>def tiger(a,b): #a,b均为形式参数
return a+b
>>>tiger(1,2) #1,2为实际参数,参与实际运算
3
二、固定参数和可变参数
固定参数是在参数表中写明参数名key的参数,固定了参数的数量和顺序。
类似于:
def func(key1,key2,key3...):
def func(key1,key2=value2,key3...):
可变参数是指在定义的时候还不知道会有多少参数传入,用特定的符号来替代。
def func(*args): #不带key的多个参数
def func(**kwargs): #key=val形式的多个参数
*args 是arguments的缩写。 其本质是元组。
**kwargs 是keywords agrs的缩写。其本质是字典。
值得注意的是,*是在定义函数的形式参数时用来标志参数的类型,在函数体内要获取真正的参数需要将*去掉。
例子1:关于固定参数调用的逻辑
def panda(key1,key2,key3=23): print("k1=%s,k2=%s,k3=%s"%(key1,key2,key3))
print("###panda###")
#下面的函数按照约定的顺序传入了key1和key2,但是没有传入key3值,故直接采用了缺省值
panda("a","b")
#下面的函数按照约定的顺序传入了key1、key2、key3,注意这里的key3采用的是最新定义的值
panda("aa","bb",555)
#下面的函数利用参数名称关联了对应的值,所以可以不管顺序。key3没有传入,直接采用了缺省值。
panda(key2="cc",key1="dd")
结果:
###panda###
k1=a,k2=b,k3=23
k1=aa,k2=bb,k3=555
k1=dd,k2=cc,k3=23
例子2:关于不带key的多个参数的调用
def cat(*args):
for arg,i in zip(args,range(len(args))):
#关于zip函数的使用大家可以自行查阅
#在函数中参与运算的时候*需要去掉
print("arg%d=%s"%(i,arg))
print("==cat==")
cat(11,22,"abc","true") #参数1
cat(11,22,"abc","true",33) #参数2
结果:
==cat==
arg0=11
arg1=22
arg2=abc
arg3=true
arg0=11
arg1=22
arg2=abc
arg3=true
arg4=33
例子3:关于带key的多个参数的调用
def dog(**kwargs):
for key,val in kwargs.items():
#在函数中参与运算的时候*需要去掉
print("%s=%s"%(key,val))
print("===dog===")
dog(name="andy",gender="male",age=35)
结果:
===dog===
name=andy
gender=male
age=35