Функция Python делает параметр обязательным, если передается другой параметр

#python #user-defined-functions

Вопрос:

У меня есть функция в Python, как

 def myfunc(a, b=None, c=None):  my code here  

Есть ли способ гарантировать, что, если пользователь передает значение параметра b , ему необходимо передать параметр c myfunc ?

Ответ №1:

Вы можете написать простое if условие в своей функции. Смотрите код ниже:

 def myfunc(a, b=None, c=None):  if c is not None and b is None:  raise ValueError("Value of b must be passed if value of c is passed")  your code here  

Комментарии:

1. что делать, если пользователь предоставил None в качестве третьего аргумента, это не удастся

2. Здесь предполагается, что передача None эквивалентна тому, чтобы ничего не передавать, поскольку None здесь используется значение по умолчанию.

3. В качестве значения по умолчанию принимается значение None, не передается значение no

Ответ №2:

Ни в коем случае не встроенным способом. Проверьте это сами:

 def myfunc(a, b=None, c=None):  if b is not None and c is None:  raise ValueError("Invalid arguments")  # ...  

Комментарии:

1. что делать, если пользователь предоставил None в качестве третьего аргумента, это не удастся

2. @sahasrara62 Если вы указываете значение, совпадающее со значением по умолчанию, предполагается, что вы хотели бы, чтобы поведение по умолчанию соответствовало значению по умолчанию.

3. это может быть один из случаев, когда значение c передается None в этом смысле, по крайней мере, для меня это решение не имеет никакого смысла

4. @sahasrara62 Для функции python, определенной как def func(a=None) , вызов ее с func() помощью или func(None) , или func(a=None) , как ожидается , будет иметь одинаковое поведение.