python3中对*的使用有两个地方需要特别注意一下,分别位于函数的参数和函数的返回值中。

函数参数中的*

可以通过*强制此后的参数在实际调用时必须给出参数的名称,以更清楚的表明参数值的含义。

def f(name, *, age=21):
    print(name,",",age)
    
f("zhangsan")
zhangsan , 21
f("zhangsan",21)
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-3-d3f8996c48b8> in <module>
----> 1 f("zhangsan",21)


TypeError: f() takes 1 positional argument but 2 were given
f("zhangsan", age=22)
zhangsan , 22

函数返回值中的*

python允许函数返回多个值,在接收这些返回值时,可以通过*简化变量的个数。

def f():
    return "zhangsan",89,95,100,21 # 姓名,语文成绩,数学成绩,英语成绩,年龄
name, *scores, age = f()
print(name)
print(scores)
print(age)
zhangsan
[89, 95, 100]
21