*和**说明

Posted cmd61

tags:

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

1.站在形参的角度看 *
形参中的*会将多余的(溢出的)位置实参 统一用元组的形式处理 传递给*后面的形参名
def func(x,y,*z):
    print(x,y,z)  # z = (3, 4, 5, 6, 7, 8, 54, 43, 4, 5, 6, 6, 7, 8)
func(1,2,3,4,5,6,7,8,54,43,4,5,6,6,7,8,)
2.站在实参的角度看 *
def func(x,y,z):
    print(x,y,z)
# l = [1,2,3]
# a,b,c = l
# func(a,b,c)
# func(*[1,2,3,4,5,6])  # *会将列表打散成位置实参一一传入等价于func(1,2,3,4,5,6)
func(*(1,2,3))  # 等价于func(1,2,3)
def func(x,*z):
    print(x,z)
func(1,*1,2,3)  # *在形参中只能接收多余的位置实参 不能接收关键字实参
*只能将列表 元组 集合 字符串
*的内部你可以看成是for循环
3.站在形参的角度看**
def func(x,y,**z):
    print(x,y,z)  # z = z: 1, a: 1, b: 2, c: 3
func(x=1,y=2,z=1,a=1,b=2,c=3)
**会接收所有多余的关键字参数 并将关键字参数 转换成字典的形式 字典的key就是关键字的名字
字典的value就是关键字的名字指向的值  将字典交给**后面的变量名
4.站在实参的角度看 **
func(12,3,4)
func(x=1,y=2,z=3)
d = x:1,y:2,z:333
func(x=1,y=2,z=3)
func(**d)  # 等价于func(x=1,y=2,z=333)
**会将字典拆封成 key = value的形式
5.总结
*在形参中能够接受多余的位置参数 组织成一个元祖赋值给*后面的变量名
**在形参中能够接受多余的关键字参数 组织成一个字典赋值给**后面的变量名
*:在实参中 *能够将列表 元祖 集合 字符串 打散成位置实参的形式传递给函数
(*就看成是for循环取值)
**:在实参中 能将字典打散成key = value的形式 按照关键字参数传递给函数
需求 你写的函数 无论调用者按照正确传参的方式无论怎么传 你的函数都能够正常执行
def func1(*x,**y):
    print(x,y)
func1(1,2,3,4,5,6,x=1,y=2,z = 3)
注意python推荐形参*和**通用的写法
def func2(*args,**kwargs):
    print(args,kwargs)
func2(1,2,3,4,5,6,x=1,y=2,z = 3)

以上是关于*和**说明的主要内容,如果未能解决你的问题,请参考以下文章

EXPDP和IMPDP使用说明

什么是BSS、OSS和MSS 说明

c#中请说明类的三大特性,并举例说明类的继承和多态。

需求说明书一般都包含啥内容?

K8S 和 Docker 关系简单说明

转换说明符和转换说明修饰符