位置参数
是最普通的参数,python解释器将每个参数根据出现在调用中的顺序,对号入座:
>>> def score(x,y):
... return x*y
...
>>> print(score(1,2))
2
多了少了都不行:
>>> print(score(1))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: score() missing 1 required positional argument: 'y'
默认参数
默认参数顾名思义,参数带有默认值,在调用的时候,如果不指定参数值,则使用默认值:
>>> def score_default(x,y=0):
... return x*y
...
>>> print(score_default(1))
0
>>> print(score_default(1,2))
2
默认参数与位置参数同时出现时,需要先定义位置参数,再定义默认参数。从思想上来说,如果默认参数在前,位置参数再后,那还有必要定义默认参数吗:
>>> def score_default(x=0,y):
... return x*y
...
File "<stdin>", line 1
SyntaxError: non-default argument follows default argument
即使是(位置参数,默认参数,位置参数),这样也是不行的:
>>> def score_default(x,y=0,z):
... return x*y
...
File "<stdin>", line 1
SyntaxError: non-default argument follows default argument
>>>
默认参数有坑,要特别注意:
>>> def score_default_set(x,s=set()):
... s.add(x)
... return s
...
>>> print(score_default_set(1)
... )
{1}
>>> print(score_default_set(2))
{1, 2}
>>> print(score_default_set(3))
{1, 2, 3}
看到了吧&#