参数传递
形式参数(形参):定义函数设置的参数
实际参数(实参):调用函数传入的参数
一、位置参数的传递
函数调用时 参数 按照“位置”依次传递给 形参
# 函数调用时 参数 按照“位置”依次传递给 形参
def get_max(a,b):
"""比较a和b的大小"""
if a>b:
print(a,"比较大")
else:
print(b,"比较大")
get_max(5,20)
二、关键字参数的传递
"形参=实参",将 实参 按照对应的 “关键字” 传递给 形参
#"形参=实参",将 实参 按照对应的 “关键字” 传递给 形参
def connect(ip,port):
"""连接设备"""
print(f"设备{ip}:{port}连接")
connect(ip="127.0.01",port=8080)
三、默认参数的传递
函数定义是可以指定形参的默认值,调用可以直接用默认值,也可以修改
注意:默认形参后面不能有非默认形参!!!!!
#函数定义是可以指定形参的默认值,调用可以直接用默认值,也可以修改
def connect(ip, port=8080):
"""连接设备"""
print(f"设备{ip}:{port}连接")
connect(ip="127.0.02")
connect(ip="127.0.03",port=3306)
四、参数的打包和解包
打包:将多个参数打包成一个元组或字典,在函数调用时将其作为一个整体传递给形参。
‘*args’:它可以接收以元组形式打包的多个值。
‘**kwargs’:它可以接收以字典形式打包的多个值。
# 函数定义时无法确定按收多少个数据
# "*args"或"**kwargs"
print("-----打包------")
def test(*args):
print(args)
test("Python","a",23,56)
解包:使用特殊语法将元组或字典拆分为多个值并赋给对应的形参。
函数调用时按收实参是元祖,使用“*”
函数调用时按收实参是字典,使用“**”,按收值
# 函数调用时按收实参是元祖,使用“*”
# 函数调用时按收实参是字典,使用“**”,按收值
def test(a,b,c,d,e):
print(a,b,c,d,e)
nums = (12,22,33,44,55)
test(*nums)
nums = {"a":12,"b":22,"c":33,"d":44,"e":55}
test(**nums)
五、混合传递
传递的方式按优先级从高到低依次为:位置参数的传递>关键字参数的传递>默认参数的传递>打包传递
# 位置参数,默认参数,*args,关键字-only参数,**kwargs
# 仅关键字参数
# 定义优先级
print("--------混合传递-----------")
def func(a, b=2, *args, c, **kwargs):
print(a,b,args,c,kwargs)
# 正确调用
func("A","B","Math","Science",c="C",city="Hubei")
# 错误调用1:缺少必要的关键字参数
# func("A","B","Math","Science")
# 错误调用2:重复传参
# func("A",b="B",e="Math",b=16)
# 错误调用3:位置参数在关键字参数之后
# func(a="A",b="B","Math","Science")