这个问题基本弄清楚了,星号(asterisk)主要在函数定义和函数调用的时候使用。
*
会将所有的参数,放入一个元组(tuple)供函数使用。 **
会将所有的关键字参数,放入一个字典(dict)供函数使用。 具体到描述中的函数:
等同于Aniki("a", "b", "c")
等同于 Aniki(a="Ass", b="We", c="Can")
等同于 Aniki(a="Ass", b="We", c="Can",b=(1,2))
希望说清楚了。
Stack Overflow上这个问题的回答更全面,提到了星号的其他作用,推荐看一看What does ** (double star/asterisk) and * (star/asterisk) do for parameters?
Python3中新增的两种用法:
在*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文档:
可以用这个在线的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