python函数中的*与**

Posted hjhlg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python函数中的*与**相关的知识,希望对你有一定的参考价值。

1)*将函数参数打包成元组使用,传入参数为位置参数形式

>>> def test1(*arge):

...     print(arge)

...

>>> test1(1)

(1,)

>>> test(1,2,3,4)

>>> def test2(x,*args):

...     print(x)

...     print(args)

...

>>> test2(1,23,4,5,6)

1

(23, 4, 5, 6)

若当参数为列表,元组,集合的时候想要将其中元素独立传入函数中,可以使用*来解包

>>> test1([1,2,3,4,5,6])

([1, 2, 3, 4, 5, 6],)

>>> test1(*[1,2,3,4,5,6])

(1, 2, 3, 4, 5, 6)

>>> test1(*{1,2,3,4,5,6})

(1, 2, 3, 4, 5, 6)

>>> test1(*(1,2,3,4,5,6))

(1, 2, 3, 4, 5, 6)

当传参是使用*解包字典的时候作用是将字典遍历传输,值为字典的key

>>> test1(*{‘Alice‘: ‘2341‘, ‘Beth‘: ‘9102‘, ‘Cecil‘: ‘3258‘})

(‘Alice‘, ‘Beth‘, ‘Cecil‘)

2)**将函数参数打包成字典形式,传入参数为关键字参数形式

>>> def test3(**kwargs):

...     print(kwargs)

>>> def test4(x,**kwargs):

...     print(x)

...     print(kwargs)

>>> test3(z=1,y=2,c=3)

{‘z‘: 1, ‘y‘: 2, ‘c‘: 3}

>>> test4(1,a=2,b=3)

1

{‘a‘: 2, ‘b‘: 3}

若实参为字典时可以使用**解包,将字典解包成关键字参数传入,不解包会报错

>>> test3(**{‘Alice‘: ‘2341‘, ‘Beth‘: ‘9102‘, ‘Cecil‘: ‘3258‘})

{‘Alice‘: ‘2341‘, ‘Beth‘: ‘9102‘, ‘Cecil‘: ‘3258‘}

3)混用

>>> def test5(x,*args,**kwargs):

...     print(x)

...     print(args)

...     print(kwargs)

...

>>> test5(1,2,3,4,a=5,b=6)

1

(2, 3, 4)

{‘a‘: 5, ‘b‘: 6}

4)错误语法

在定义参数的时候*必须在**前否则报错

>>> def test7(x,**kwargs,*args):

  File "<stdin>", line 1

    def test7(x,**kwargs,*args):

                         ^

SyntaxError: invalid syntax

以上是关于python函数中的*与**的主要内容,如果未能解决你的问题,请参考以下文章

Python中的函数与变量

python中的函数式编程与装饰器

13python中的函数(闭包与装饰器)

Python中的map与reduce函数简介

python函数中的*与**

python 中的 print 函数与 list函数