返回顶部

python中的*与**

[复制链接]
不知道呀Lv.2 显示全部楼层 发表于 2021-11-5 13:18:58 |阅读模式 打印 上一主题 下一主题
本帖最后由 不知道呀 于 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日内与联系我们,我们会予以更改或删除相关文章,以保证您的权益!


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

达内教育:成立于2002年。致力于面向IT互联网行业,培养软件开发工程师、测试工程师、系统管理员、智能硬件工程师、UI设计师、网络营销、会计等职场人才 达内使命:缔造年轻人的中国梦、缔造达内员工的中国梦 达内愿景:做管理一流的教育公司
  • 商务合作

  • 微信公众号

  • Powered by Discuz! X3.4 | Copyright © 2002-2021, 达内教育 Tedu.cn
  • 京ICP备08000853号-56 |网站地图 | 京公网安备 11010802029508号