#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)
, как ожидается , будет иметь одинаковое поведение.