百科问答小站 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函数中*和**的内涵究竟是什么呢? 
  如何评价 Dropbox 对 400 万行 Python 代码进行类型检查的经验? 
  如何看待 Python 之父关于帮助中国程序员应对 996 工作制的讨论? 
  创业公司如何能吸引一名优秀的 Python 开发者? 
  计算机视觉研一,只学过Python基础,目前代码能力很差,要不要换导师,不换的话如何毕业? 
  有哪些网站用爬虫爬取能得到很有价值的数据? 
  Python为什么需要用import导入模块?直接自动将所有模块都导入不是更好吗? 
  python爬虫如何处理.js链接? 
  Excel 的 VBA 现在还算是办公利器吗? 
  Mathematica 比起 Python 如今还有什么优势? 

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





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