• python----函数的动态传参


    函数的动态传参

    *args 将所有的实参的位置参数聚合到一个元组,并将这个元组赋值给args

      有些时候,对于函数,传入的实参数量可能是不固定的,也就是动态的,这个时候我们就需要用到函数的动态传参。下面举个个列子,我需要一个函数,无论我给他任意个数字参数,他都能返回我所有数字的和。

    def count(*args):
        sum0 = 0
        for i in args:
            sum0 += i
        return sum0
    print(count(1,2,3,4,5))
    #运行结果:15

    这样无论我在函数count中输入多少个数字,都能返回和。*args就是动态传参,实质上是函数会将接受到的值打包成元祖的形式赋值给args,不信你可以在函数值用type去判断。总结:*在函数的定义时,在 *位置参数,聚合

    **kwargs 将所有的关键字实参作为字典的键值对聚合到一个字典,并赋值给kwargs

      有时候,需要接受任意数量的实参,但预先不知道传递给函数的会是什么样的信息。在这种情况下,可将函数编写成能够接受任意数量的键 — 值对 —— 调用语句提供了多少就接
    受多少。

    def func1(**kwargs):
        print(kwargs)
      
    func1(name = 'king',age = 24)
    运行结果:{'name': 'king', 'age': 24}

    可以看出**是将接收到的关键字参数作为键值对赋值给,kwargs。

      编写一个函数,将一辆汽车的信息存储在一个字典中。这个函数总是接受制造商和型号,还接受任意数量的关键字实参。这样调用这个函数:提供必不可少的信息,以及两个名称 — 值对,如颜色和选装配件。这个函数必须能够像下面这样进行调用:

    car = make_car('subaru', 'outback', color='blue', tow_package=True)

    分析要求,题目要求函数总是接受制造商和型号,也就是这2个参数是必须填的,我们可以设置成位置参数,而其他还接受任意数量的关键字实参。所以需要用到**方法:

    def make_car(name,producter,**kwargs):
        dic = {}
        dic['车型'] = name
        dic['生产商']=producter
        for i in kwargs:
            dic[i] = kwargs[i]
        return dic
    car = make_car('subaru', 'outback', color='blue', tow_package=True)
    print(car)
    #运行结果:
    {'车型': 'subaru', '生产商': 'outback', 'color': 'blue', 'tow_package': True}
    #如果只输入car = make_car('subaru', 'outback')
    则会打印 {'车型': 'subaru', '生产商': 'outback'}

    函数形参的顺序

    位置参数,*args, 默认参数 **kwargs我们在定义形参时,必须遵循这样的原则位置参数,默认参数

    def func(a,b,sex=''):
        # print(a)
        print(sex)
    func(100,200,)
    位置参数,*args, 默认参数
    def func(a,b,*args,sex='',):
        # print(a)
        print(a,b)
        print(sex)
        print(args)
    func(100,200,1,2,34,5,6)
    位置参数,
    *args, 默认参数 **kwargs def func(a,b,*args,sex='',**kwargs,): print(a,b) print(sex) print(args) print(kwargs) func(100,200,1,2,34,5,6,sex='nv',name='alex',age=1000)
  • 相关阅读:
    大学随笔
    TMS320C54X系列DSP上FFT运算的实现(转)
    python第一天学习笔记以及心得
    Struts2学习笔记
    C#实现eval 进行四则运算(有码)
    sql 将字符串转换为表
    XML
    图形用户界面
    java io
    java集合
  • 原文地址:https://www.cnblogs.com/Kingfan1993/p/9487238.html
Copyright © 2020-2023  润新知