美文网首页
Python------*args和**kwargs

Python------*args和**kwargs

作者: 尼古拉苏 | 来源:发表于2018-06-14 09:20 被阅读0次

    总结:

    1. *args
      首先时把位置传值的参数传递完成后,多余的参数会被存储为一个元组,之后的默认参数无法按位置传值,除非使用指定参数传值。
    2. **kwargs
      首先时把位置传值的参数和指定位置传值传递完成,多余指定位置传值的参数会被存储为一个数组传递

    在阅读代码的时候,我们常常会遇到这两个东西,那么我们看看到底是什么东西吧。
    *args:表示实参按位置传值,而多余的未指定形参名称的值传递给了*args,并且以元组的方式呈现。

    def king(perv,last,*group):
        print(perv)
        print(last)
        print(group)
    
    if __name__ == '__main__':
        king("a",4,5,"3",{"1":1,2:2})
    
    #output:
    #a
    #4
    #(5, '3', {'1': 1, 2: 2})
    

    当*args混用默认参数时:

    def king1(perv,last=1000,*group):
        print('king1')
        print(perv)
        print(last)
        print(group)
    def king2(perv,*group,last=1000):
        print('king2')
        print(perv)
        print(last)
        print(group)
    if __name__ == '__main__':
        king1("a",4,5,"3",{"1":1,2:2})
        king2("a",4,5,"3",{"1":1,2:2})
    
    #output:
    #king1
    #a
    #4
    #(5, '3', {'1': 1, 2: 2})
    #king2
    #a
    #1000
    #(4,5, '3', {'1': 1, 2: 2})
    

    表明默认参数的值被覆盖了。当遇到king2()这种情况时,我们需要这么调用就行了king2("a",4,5,"3",{"1":1,2:2},last=1),注意last=要放在后面。
    因此我们可以总结出两种方式使用:

    1. 作为形参
    def king(*group):
        print(group)
    if __name__ == '__main__':
        king("a",4,5,"3",{"1":1,2:2})
    #output:
    #(4,5, '3', {'1': 1, 2: 2})
    
    1. 作为实参
    def king(a,b,c):
        print(group)
    if __name__ == '__main__':
        king(*("a",4,5))
    #output:
    #a
    #4
    #5
    

    **kwargs:表示就是形参中按关键字传值吧多余的值以字典的方式呈现。

    def king(x,**kwargs):
         print(x)
         print(kwargs)
    if __name__ == '__main__':
        king("a",z=5,y=4)
    #output:
    #a
    #{'z': 5, 'y': 4}
    #
    

    注意不能在调用时用x=,否则会使得x赋值了两次而报错。
    混用默认参数:

    def king(x,y=100,**kwargs):
         print(x)
         print(y)
         print(kwargs)
    if __name__ == '__main__':
        king("a",z=5,y=4)
    #output:
    #a
    #4
    #{'z': 5}
    

    因此可以看见这个是把多余的指定参数以字典的方式存储到了kwargs
    因此我们可以总结出两种方式使用:

    1. 作为形参
    def king(**kwargs):
        print(kwargs)
    if __name__ == '__main__':
        king(a="a",b=4,c=5,d={"1":1,2:2})
    #output:
    #{'a': 'a', 'b': 4, 'c': 5, 'd': {'1': 1, 2: 2}}
    
    1. 作为实参
    def king(a,b,c,d):
        print(a)
        print(b)
        print(c)
        print(d)
    
    if __name__ == '__main__':
        king(**{'a':1,'b':10,'c':100,'d':1000})
    #output:
    #1
    #10
    #100
    #1000
    

    相关文章

      网友评论

          本文标题:Python------*args和**kwargs

          本文链接:https://www.haomeiwen.com/subject/gzvloxtx.html