>>> def example(x, y, z=None):
... if z is None:
... z = y
... y = 0 # то самое значение по умолчанию
... return x, y, z
...
>>> example(1, 2, 3)
(1, 2, 3)
>>> example(1, 2)
(1, 0, 2)
>>>
如果值为 2,则表示第二个被写入y,然后手动传输到z
None只有当- 是第三个参数的有效值时才会出现问题,并且它可以以自然的方式到达那里:
example(1, 2, None)
UPD
我将用解决方案更新我的答案*args:
>>> def example(*xyz):
... if len(xyz) == 2:
... x, z = xyz
... y = 0
... elif len(xyz) == 3:
... x, y, z = xyz
... else:
... raise TypeError('example() takes 2 or 3 positional arguments but {} were given'.format(len(xyz)))
...
... return x, y, z
...
>>> example(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 8, in example
TypeError: example() takes 2 or 3 positional arguments but 1 were given
>>> example(1, 2)
(1, 0, 2)
>>> example(1, 2, 3)
(1, 2, 3)
>>> example(1, 2, 3, 4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 8, in example
TypeError: example() takes 2 or 3 positional arguments but 4 were given
我可以提供一个变体,检查是否输入了第三个值
如果值为 2,则表示第二个被写入
y,然后手动传输到zNone只有当- 是第三个参数的有效值时才会出现问题,并且它可以以自然的方式到达那里:UPD
我将用解决方案更新我的答案
*args:该解决方案对参数类型具有抵抗力,并且参数的存在
None不会以任何方式损害它。如何将带有参数名称的参数传递给函数