zoukankan      html  css  js  c++  java
  • python之动态参数 *args,**kwargs(聚合,打散--转载

    转自https://www.cnblogs.com/ellisonzhang/p/10243122.html

    一、函数的动态参数 *args,**kwargs, 形参的顺序

    1、你的函数,为了拓展,对于传入的实参数量应该是不固定,
    所以就需要用到万能参数,动态参数,*args, **kwargs

    1,*args 将所有实参的位置参数聚合到一个元组,并将这个元组赋值给args
    (起作用的是* 并不是args,但是约定俗成动态接收实参的所有位置参数就用args)

    def sum1(*args):
        print(args)
    sum1(1,2,['hello'])             #是一个元组(1, 2, ['hello'])

    2,**kwargs 将所有实参的关键字参数聚合到一个字典,并将这个字典赋值给kwargs
    (起作用的是** 并不是kwargs,但是约定俗成动态接收实参的所有关键字参数就用kwargs)

    复制代码
    def fun(*args,**kwargs):
        print(args)
        print(kwargs)
    fun(1,2,['a','b'],name='xiaobai',age=18)
    # 结果:
    # (1, 2, ['a', 'b'])       #位置参数,元组
    # {'name': 'xiaobai', 'age': 18}       #关键字参数,字典
    复制代码

    2、*的用法
    在函数的定义时,*位置参数,**关键字参数--->聚合。
    在函数的调用(执行)时,*位置参数,**关键字参数--->打散。

    实参--->*位置参数--->把位置参数打散成最小的元素,然后一个个添加到args里组成一个元组

    复制代码
    l1 = [1,2,3]
    l2 = [111,22,33,'xiaobai']
    #如果要将l1,l2通过函数整合到一起
    # 方法一(实参不用*):
    def func1(*args):
        return args[0] + args[1]
    print(func1(l1,l2))           #[1, 2, 3, 111, 22, 33, 'xiaobai']
    
    # 方法二(实参用*):
    def func1(*args):
        return args
    print(func1(*l1,*l2))        #(1, 2, 3, 111, 22, 33, 'xiaobai')
    复制代码


    实参--->**关键字参数--->把关键字参数打散成最小的元素,然后一个个添加到kwargs里组成一个字典

    复制代码
    def func1(**kwargs):
        print(kwargs)
    
    #func1(name='xiaobai',age=18,job=None,hobby='girl')
    func1(**{'name':'xiaobai','age':18},**{'job':None,'hobby':'girl'})
    
    # 结果:
    # {'name': 'xiaobai', 'age': 18, 'job': None, 'hobby': 'girl'}
    复制代码

    3、形参的顺序(a--->b,代表的顺序是写参数时,要先写a再写b)
    位置参数--->默认参数

    def func(a,b,sex='男'):
        print(sex)
    func(100,200)

    位置参数--->*args--->默认参数

    复制代码
    def func(a,b,*args,sex='男'):
        print(a,b)
        print(args)
        print(sex)
    func(100,200,1,2,34,5,'女',6)
    # 结果:
    # 100 200               #a,b
    # (1, 2, 34, 5,'女',6)  #args
    # 男                    #默认参数
    复制代码

    位置参数--->*args--->默认参数--->**kwargs

    复制代码
    def func(a,b,*args,sex='男',**kwargs):
        print(a,b)
        print(args)
        print(sex)
        print(kwargs)
    func(100,200,1,2,34,5,6,sex='女',name='xiaobai',age=1000)
    func(100,200,1,2,34,5,6,name='xiaobai',age=1000,sex='女')
    # 两个的结果都是:
    # 100 200              #a,b
    # (1, 2, 34, 5, 6)    #args
    # 女                  #默认参数修改后的值
    # {'name': 'xiaobai', 'age': 1000}     #kwargs
    
    # 若是形参这样写:
    def func(a,b,*args,**kwargs,sex='男'):
        print(a,b)
        print(args)
        print(sex)
        print(kwargs)
    func(100,200,1,2,34,5,6,name='xiaobai',age=1000,sex='女')
    # 结果:会报错,默认参数一定要写在kwargs前面
    复制代码
  • 相关阅读:
    uniapp 分包加载
    input和textarea中的placeholder与光标位置不一致问题
    uniapp调取摄像头扫码和生成二维码
    uniapp分享功能加传递参数
    js将后台传递的数组添加自定义的键值对
    uniapp返回上一层级带参数
    引入的字体文件包太大
    直接给变量赋值接口数据
    富文本编辑器上传不了微信文件夹的图片,使用vue-quill-editor编辑器
    博客园样式修改
  • 原文地址:https://www.cnblogs.com/yidashi110/p/10561286.html
Copyright © 2011-2022 走看看