Путь вы сделали это хорошо. Еще один способ для funB
иметь то же значение по умолчанию, как funA
, так что вы можете передать те же параметры, навылет. например, если вы делаете def funB(x, a, b=1)
, то вы всегда можете позвонить return funA(x, a, b)
просто так.
Для простых случаев выше работа хорошо. Для более сложных случаев вы можете использовать *args
и **kwargs
(пояснил here и here). В частности, вы можете передать все свои аргументы ключевых слов в качестве словаря (обычно называемого kwargs
). В этом случае каждая функция будет устанавливать свои собственные независимые значения по умолчанию, и вы бы просто пройти весь словарь через:
def funA(x, a, **kwargs):
b = kwargs.get("b", 1)
return a+b*x
def funB(x, a, **kwargs):
return funA(x, a, **kwargs)
Если kwargs
пусто, когда передаются funB
(b
не указан), то он будет установлен по умолчанию в funA
утверждением b = kwargs.get("b", 1)
. Если задано значение b
, оно будет передано через as-is. Обратите внимание, что в funB
вы можете получить доступ к b
со своим собственным независимым значением по умолчанию и по-прежнему получать поведение, которое вы ищете.
Хотя это может показаться излишним для вашего примера, извлечение пары аргументов в начале функции не имеет большого значения, если функция достаточно сложная. Это также дает вам большую гибкость (например, избегая многих распространенных gotchas).
Почему бы не установить значение по умолчанию для 'b' в' funB', а затем всегда отправлять с параметром 'b' в' funA() '? –