函数调用时,实参默认按位置顺序进行传递,并且要求个数和形参完全匹配。这就是位置参数
def SetInfomation(name,age):
Username=name
Userage=age
print("Username:%s,Userage:%s"%(name,age))
SetInfomation("张三", 20)
输出结果如下:
在调用函数时如果不指定某个参数,Python 解释器会抛出异常。为了解决这个问题,Python 允许为参数设置默认值,即在定义函数时,直接给形式参数指定一个默认值。这样的话,即便调用函数时没有给拥有默认值的形参传递参数,该参数可以直接使用定义函数时设置的默认值。
def SetInfomation(name,age=20):
Username=name
Userage=age
print("Username:%s,Userage:%s"%(name,age))
SetInfomation("张三")
SetInfomation("李四",45)
输出结果如下:
就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个
在参数前面加上*就是可变参数。在函数内部,参数numbers接收得到的是一个tuple,调用该函数时,可以传入任意个参数,包括0个参数
def calc(*numbers):
sum= 0
for n in numbers:
sum= sum+n*n
return sum
print(calc(1,2,3,4,5))
t=(1,2,3,4,5)
print(calc(*t))
print(calc(*(1,2,3,4,5)))
此块代码,t为一个元组,相当于把传入的参数包装起来
在传入参数时,星号就有着解开包装的作用
输出结果如下
命名关键字参数需要一个特殊分隔符 * ,* 后面的参数被视为命名关键字参数
命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用将报错
如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了
def SetInfomation(*,name,age):
print(name,age)
SetInfomation(name="张三", age=20)
输出结果如下:
关键字参数是指使用形式参数的名字来确定输入的参数值。通过此方式指定函数实参时,不再需要与形参的位置完全一致,只要将参数名写正确即可。
该形式的语法格式如下所示:
def func(a, b, **kwargs)
其中 **kwargs即为可变参数(也为关键字参数),**kwargs表示创建一个名为 kwargs的空字典,该字典可接受任意多个外界传入的非关键字实参。
def SetInfomation(name,age,**other):
print("name:%s,age:%s"%(name,age),other)
SetInfomation("张三",20,city="重庆",height="170cm")
Info={"city":"四川","height":"180cm"}
SetInfomation("李四",40,**Info)
输出结果如下:
特别注意的是,当默认参数与关键字参数同时存在,且关键字参数以字典解包的形式传入时,如果字典的有key与默认参数的参数名相同,则默认参数的值会被赋予字典里相同的key所对应的value
以下演示:
def SetInfomation(name,age,weight=80,**other):
print("name:%s,age:%s,weight:%s"%(name,age,weight),other)
Info={"weight":90,"city":"四川","height":"180cm"}
SetInfomation("李四",40,**Info)
输出结果如下:



