python中的*与**

应用场景

函数的定义与函数参数传递

调用函数时传递*

此时*理解为解包的过程,如果有个函数拥有固定的参数,我们可以给该函数传递一个列表或者是元组,并在列表或元组的前面加上*,那么列表或者元组中的各个元素会自动的拆解给各个参数。如下面的示例:

def A(name, age, index):
    return {'name': name, 'age': age, 'index': index}
arg1 = ("小明", 22, 1)
print(A(*arg1))

结果为:

{'name': '小明', 'age': 22, 'index': 1}

注意: 使用解包的时候,若函数接受的参数是固定,那么解包出来的参数个数应与接受参数的数量匹配,否则不论解包出来参数是多与少都会报错。

函数定义时使用*

此时代表了函数接收不定长的参数,适用于无法确定函数需要传入自变量个数的情况。此时,但参数传递过来之后,会形成一个元组,再设置给定义的变量中。示例:

def A(*number):
    print(number)
arg = ("小明", 22, 1)
A(*arg)
A(1,2,3,4,5,6)
A(1)

结果为:

('小明', 22, 1)
(1, 2, 3, 4, 5, 6)
(1,)

调用函数时传递**

此时可以理解为解析字典,然后按照key=value的形式给函数传递参数。示例:

def A(name, age):
    print({"name": name, "age": age})
arg = {"name":"小明", "age":22}
arg = {"age":22, "name":"小明",}
A(**arg)
A(**arg1)
A(name="小明", age=22)

结果为:

{'name': '小明', 'age': 22}
{'name': '小明', 'age': 22}
{'name': '小明', 'age': 22}

注意,这里参数的数量也需要匹配。

函数定义时使用**

将以赋值形式传递过来的参数,构建为一个字典,一下示例构建了一个可以接受任何参数的函数:

def A(*arg1, **arg2):
    print(arg1)
    print(arg2)
arg1 = (33, "xiaohong")
arg2 = {"name":"小明", "age":22}
A(*arg1, **arg2)
A(33, "小红", name="小明", age=22)

结果为:

(33, 'xiaohong')
{'name': '小明', 'age': 22}
(33, '小红')
{'name': '小明', 'age': 22}

注意,赋值类型的参数与普通参数需按照函数定义时的顺序摆放。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值