函数参数的传递
形式参数(形参):定义函数设置的参数。
实际参数(实参):调用函数传入的参数。
函数参数的传递是指将实参传递给形参的过程。
位置参数的传递
示例如下:
print("-----------------参数传递----------------")
print("-------------位置参数的传递--------------")
def get_max(a,b):
"""比较a和b的大小"""
if a>b:
print(a,"比较大")
else:
print(b,"比较大")
get_max(5,28)
结果如下:
关键字参数的传递
“形参=实参”,将 实参 按照对应的“关键字”传递给 形参。
示例如下:
print("-------------关键字参数的传递-------------")
def connect(ip,port):
"""连接设备"""
print(f"设备{ip}:{port}连接")
connect(ip="127.0.01",port=8080)
结果如下:
默认参数的传递
函数定义时可以指定形参的默认值,调用可以直接用默认值,也可以修改。
注意:默认形参后面不能有非默认形参!!!!!
示例如下:
print("-------------默认参数的传递-------------")
def connect(ip,port=8080):
"""连接设备"""
print(f"设备{ip}:{port}连接")
connect(ip="127.0.02")
connect(ip="127.0.03",port=3306)
结果如下:
参数的打包与解包
1.打包:
函数定义时无法确定接收多少个数据,将多个实参打包成一个元组或字典,在函数调用时将其作为一个整体传递给形参。如果形参的前面加上*”,那么它可以接收以元组形式打包的多个值;如果形参的前面加上“**”, 那么它可以接收以字典形式打包的多个值。
①"*args"或"**kwargs"。
2.解包:
使用特殊语法将元组或字典拆分为多个值并赋给对应的形参。
①函数调用时接收实参是元组,使用"*"。
②函数调用时接收实参是字典,使用"**",接收值。
示例如下:
print("------------参数的打包与解包-----------")
print("---------打包---------")
def test(*args):
print(args)
test("Python","a",23,56)
print("----------解包--------")
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")