函数的参数传递——python

95 阅读2分钟

参数传递

形式参数(形参):定义函数设置的参数

实际参数(实参):调用函数传入的参数

一、位置参数的传递

函数调用时 参数 按照“位置”依次传递给 形参

# 函数调用时 参数 按照“位置”依次传递给 形参
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")