Предоставление необязательных аргументов вложенного метода в Python - PullRequest
0 голосов
/ 16 января 2019

Подобный вопрос задавался ранее , но я не знаю, что мне нравится ответ. У вас есть родительская функция, которая вызывает дочернюю функцию.

def parent(a):
   return child(a) * 2

def child(a, b=10, c=20):
   return a + b + c

Если я хочу, чтобы родительский метод выставлял b и c, я могу сделать что-то вроде ниже. Это работает, но кажется громоздким, так как я многого к этому стремлюсь (возможно, это наводит на мысль о другой проблеме).

def parent(a, b=None, c=None):

    kwargs = {}
    if b is not None:
        kwargs['b']=b
    if c is not None:
        kwargs['c']=c

    return child(a, **kwargs)

Есть ли лучший (т.е. меньше кода) способ сделать это?

1 Ответ

0 голосов
/ 16 января 2019

Если parent и child являются вашими собственными функциями, то значения по умолчанию могут быть определены как константа, которая является общей для обеих функций.

B_DEF = 10
C_DEF = 20

def parent(a, b=B_DEF, c=C_DEF):
   return child(a,b,c) * 2

def child(a, b=B_DEF, c=C_DEF):
   return a + b + c
...