zoukankan      html  css  js  c++  java
  • 不定长参数的装包与拆包

    #转载请联系

    def task(a,b,c,*args,**kwargs):
        print(a)
        print(b)
        print(c)
        print(args)
        print(kwargs)
    
    task(1,2,3,4,5,6,name="chichung",age=22)
    
    输出:
    1
    2
    3
    (4, 5, 6)
    {'age': 22, 'name': 'chichung'}

    编写函数时,如果没办法预计用户传入的参数有多少个,可以用装包的方式。在进行数据的处理时,把包拆开,语法上就是把前面的*去掉。如果没有把*去掉会出现什么问题呢?

    def task(a,b,c,*args,**kwargs):
        print(a)
        print(b)
        print(c)
        print(*args)
        # print(**kwargs)
    
    task(1,2,3,4,5,6,name="chichung",age=22)
    
    输出:
    1
    2
    3
    4 5 6  # 一个这样的东西,没有逗号
    def task(a,b,c,*args,**kwargs):
        print(a)
        print(b)
        print(c)
        # print(*args)
        print(**kwargs)
    
    task(1,2,3,4,5,6,name="chichung",age
    
    输出:
    1
    2
    3
    Traceback (most recent call last):
      File "/home/chichung/桌面/不定长参数的装包与拆包.py", line 8, in <module>
        task(1,2,3,4,5,6,name="chichung",age=22)
      File "/home/chichung/桌面/不定长参数的装包与拆包.py", line 6, in task
        print(**kwargs)
    TypeError: 'age' is an invalid keyword argument for this function

    至于为什么去掉**kwargs的*会报错呢?我暂时也不知道原因- -|

    现在有一个需求,task()函数里面还要再写一个函数,而且这个函数也要接收和task()函数一模一样的参数,怎么该做呢?

    很简单

    def task(a,b,c,*args,**kwargs):
        #task的代码
       task2(a,b,c,*args,**kwargs)  # 注意是有*号的。
        
    def task2(a,b,c,*args,**kwargs):
        #task2的代码
  • 相关阅读:
    套接口编程
    传输层
    1 简介
    共享池2
    jquery.dataTables列中内容居中问题?求解?
    bootstrap-multiselect.js多选下拉框初始化时默认选中初始值
    datatable 动态显示/隐藏列
    bootstrap table 主子表 局部数据刷新(刷新子表)
    bootstrap table 怎么实现前两列固定冻结?
    bootstrapTable表格表头换行
  • 原文地址:https://www.cnblogs.com/chichung/p/9620608.html
Copyright © 2011-2022 走看看