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的代码
  • 相关阅读:
    hive学习
    spark Streaming
    spark sql
    参考
    数论基础
    2020.07.17模拟3
    2020.07.16模拟2
    关于Linux环境下的对拍
    2020.07.15模拟1
    三体
  • 原文地址:https://www.cnblogs.com/chichung/p/9620608.html
Copyright © 2011-2022 走看看