大内高手社区

标题: python中的*与** [打印本页]

作者: 不知道呀    时间: 2021-11-5 13:18
标题: python中的*与**
本帖最后由 不知道呀 于 2021-11-5 13:20 编辑

  应用场景

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

  调用函数时传递*

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

[Python] 纯文本查看 复制代码
def A(name, age, index):
    return {'name': name, 'age': age, 'index': index}
arg1 = ("小明", 22, 1)
print(A(*arg1))


  结果为:

[Python] 纯文本查看 复制代码
{'name': '小明', 'age': 22, 'index': 1}


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

  函数定义时使用*

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

[Python] 纯文本查看 复制代码
def A(*number):
    print(number)
arg = ("小明", 22, 1)
A(*arg)
A(1,2,3,4,5,6)
A(1)


  结果为:

[Python] 纯文本查看 复制代码
('小明', 22, 1)
(1, 2, 3, 4, 5, 6)
(1,)


  调用函数时传递**

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

[Python] 纯文本查看 复制代码
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)


  结果为:

[Python] 纯文本查看 复制代码
{'name': '小明', 'age': 22}
{'name': '小明', 'age': 22}
{'name': '小明', 'age': 22}


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

  函数定义时使用**

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

[Python] 纯文本查看 复制代码
def A(*arg1, **arg2):
    print(arg1)
    print(arg2)
arg1 = (33, "xiaohong")
arg2 = {"name":"小明", "age":22}
A(*arg1, **arg2)
A(33, "小红", name="小明", age=22)


  结果为:

[Python] 纯文本查看 复制代码
(33, 'xiaohong')
{'name': '小明', 'age': 22}
(33, '小红')
{'name': '小明', 'age': 22}


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

  
【免责声明】本文部分系转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与联系我们,我们会予以更改或删除相关文章,以保证您的权益!







欢迎光临 大内高手社区 (https://bbs.tedu.cn/) Powered by Discuz! X3.4