【Python】*args和**kwargs

使用*args和kwargs可以非常方便的定义函数,同时增强代码的可扩展性,方便代码维护。**

#1.*args
***args 用在不确定传入参数个数的情况下。且以元组方式呈现。**比如下面的例子:

def myfunction(*args):
    print(*args[0])
    print(*args[1])
    print(*args[2])

if __name__ == '__main__':
    myfunction([1,2,3],(True,False),'hello')

输出:
1 2 3 True False h e l l o

当同时有位置参数和*args行参时,用法如下:

def myfunction(x,*args):
    print('x:',x)
    print('*args[0]:',*args[0])
    print('*args[1]:',*args[1])
    #print(*args[2])

if __name__ == '__main__':
    myfunction([1,2,3],(True,False),'hello')

输出:
x: [1, 2, 3] *args[0]: True False *args[1]: h e l l o

#2.**kwargs
形参中按照关键字传值,把多余的传值以字典的方式呈现

def myfunction(x,**kwargs):
    print(kwargs)

if __name__ == '__main__':
    myfunction(1,a=1,b=2,c=3)

输出一个字典:
{'a': 1, 'b': 2, 'c': 3}

也可以分开输出和调用:

def myfunction(**kwargs):
    for k,v in kwargs.items():
        print(k,v)

if __name__ == '__main__':
    myfunction(a=1,b=2,c=3)

#3.同时使用位置参数 ,*args和**kwargs
同时使用三者时,顺序必须是位置参数,*args,**kwargs,否则会报错。

如下面的例子所示:

def myfunction(param,*args,**kwargs):
    print('param:',param)
    print('*args:',*args)
    print('**kwargs:',kwargs)

if __name__ == '__main__':
    myfunction('hello',['x','y','z'],(20,30),a=1,b=2,c=3)

输出:
param: hello *args: ['x', 'y', 'z'] (20, 30) **kwargs: {'a': 1, 'b': 2, 'c': 3}


本文是在阅读别人材料的基础上做了一个自己的小结,下面是两篇很好的参考链接:
python函数——形参中的:*args和**kwargs
理解 Python 中的 *args 和 **kwargs

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章