当前位置 博文首页 > Python函数中的不定长参数相关知识总结

    Python函数中的不定长参数相关知识总结

    作者:想要飞得更高 时间:2021-08-06 18:21

    一、 不定长位置参数

    # 在定义函数参数时,可以在形参的前面加*,该形参将获取所有的位置实参
    # 它会将所有的实参保存在一个元组中
    def fn(*args):
        print("args=", args)
        print("args type:", type(args))
    
    
    # 带*形参和其他参数配合使用
    def fn1(a, b, *args):
        print(a)
        print(b)
        print(args)
    
    
    # 下面这两种写法可以,但是在传实参的时候要注意
    def fn2(*args, a, b):
        print(a)
        print(b)
        print(args)
    
    
    def fn3(a, *args, b):
        print(a)
        print(args)
        print(b)
    
    
    if __name__ == "__main__":
        # 接收所有的位置参数
        fn(1, 2, 3, 4, 5)
        fn1(11, 12, 13, 14)
        # fn2(21, 22, 23, 24)  #这么传会报错
        fn2(21, 22, a=23, b=24)
        # fn3(21, 22, 23, 24)  #这么传会报错
        fn3(21, 22, 23, b=24)
    

    fn运行 结果

    在这里插入图片描述

    fn1运行结果

    在这里插入图片描述

    fn2运行结果

    在这里插入图片描述

    fn3运行结果

    在这里插入图片描述

    总结:

    1.带*的形参只能有一个,有多个会报错,不能识别

    2.带*的形参可以和其他参数配合使用,比如和不带星的

    3.带*的形参不一定要放在最后面,可以放在最前面,中间,最后。但是注意,带星的参数后的所有参数,必须以关键字参数的形式传递,否则会保错。

    二、不定长关键字参数

    # 带*的形参只能接收位置参数,关键字参数接收不能接收
    # 如下会报错,fn传如下值是会报错的
    def fn(*args):
        print("args=", args)
        print("args type:", type(args))
    
    if __name__ == "__main__":
        # 这样传会保存,args不能接收关键字参数
        fn(1, 2, 3, 4, a=10)
    

    运行如下:

    在这里插入图片描述

    # **形参能接收关键字参数
    # 它将接收的所有关键字参数统一保存在一个字典中
    def fn4(**kwargs):
        print("kwargs = ", kwargs)
        print(type(kwargs))
    
    if __name__ == "__main__":
        fn4(a=1, b=2, c=3)
    

    运行结果:

    在这里插入图片描述

    总结:

    1.**形参只能有一个,并且必须写在所有参数的最后。

    2.字典的key就是参数的名字,字典的value就是参数的值

    jsjbwy