百科问答小站 logo
百科问答小站 font logo



Python函数中*和**的内涵究竟是什么呢? 第1页

  

user avatar   pengwk 网友的相关建议: 
      

这个问题基本弄清楚了,星号(asterisk)主要在函数定义和函数调用的时候使用。

  1. 函数定义时
    1. 使用单个*会将所有的参数,放入一个元组(tuple)供函数使用。
    2. 使用两个 **会将所有的关键字参数,放入一个字典(dict)供函数使用。
  2. 函数调用时
    1. 在list,tuple,set前加一个星号会把容器中的所有元素解包(unpack)变成位置参数。
    2. 在dict前加一个星号会把字典的键变成位置参数。
    3. 在dict前加两个星号会把字典的键值对变成关键字参数。
      a={'a':'Ass','b':'We','c':'Can'}

具体到描述中的函数:

Aniki(*a)

等同于Aniki("a", "b", "c")

Aniki(**a)

等同于 Aniki(a="Ass", b="We", c="Can")

Aniki(**a,b=(1,2))

等同于 Aniki(a="Ass", b="We", c="Can",b=(1,2))


希望说清楚了。

Stack Overflow上这个问题的回答更全面,提到了星号的其他作用,推荐看一看What does ** (double star/asterisk) and * (star/asterisk) do for parameters?


Python3中新增的两种用法:

  1. Keyword-Only Arguments 仅关键字参数
  2. Extended Iterable Unpacking 扩展迭代解包

仅关键字参数

*args后加入关键字参数,就可以要求这个参数必须以关键字的方式赋值。

       def keyword_only(a, *args, b):     print[a, args, b]     

在调用的时候,必须用关键字的方式赋值。单个星号*也有相同作用,只不过不能接收无限位置参数了。

       def keyword_only(a, *, b):    print[a, args, b]     

扩展迭代解包

许多算法要求以第一个元素剩下的全部 这种方式分割一个序列。即

       first, rest = seq[0], seq[1:]     

现在可以这样:

       first, *rest = seq     

或者这样:

       a, *b, c = seq     

a取得第一个元素,c取得最后一个元素,b取得剩下的全部。

PEP文档:

  1. PEP 3102 -- Keyword-Only Arguments
  2. PEP 3132 -- Extended Iterable Unpacking

可以用这个在线的Python3解释器试一试,Online Python3 Compiler - Online Python3 Editor - Online Python3 IDE - Python3 Coding Online - Practice Python3 Online - Execute Python3 Online - Compile Python3 Online - Run Python3 Online




  

相关话题

  python中[[3,5],[2,3]]怎么转化为[['3','5'],['2','3']]? 
  python中的lambda 和java中的lambda有什么不同? 
  'module' object has no attribute 'HTTPSConnection' 问题? 
  在编程语言中,循环语句为何选择 while 而不是 when 作为关键词? 
  Python为什么需要用import导入模块?直接自动将所有模块都导入不是更好吗? 
  如何看待 Guido 宣布退出 Python 决策层? 
  Python 有哪些能够应用在物理(尤其是凝聚态当中)的 package?主要功能是什么? 
  Python为什么需要用import导入模块?直接自动将所有模块都导入不是更好吗? 
  为什么我的cmd命令行打不开Python呢? 
  python学习一定用pycharm吗? 

前一个讨论
马化腾给 3300 名员工发价值11 亿股份,对员工能带来多大激励效果?为什么各大厂纷纷提升福利待遇?
下一个讨论
生化环材四大天坑,来说说毕业都干了啥,天坑专业的封顶是干啥?





© 2025-05-17 - tinynew.org. All Rights Reserved.
© 2025-05-17 - tinynew.org. 保留所有权利