У меня есть несколько уровней вызовов функций, передающих общий словарь аргументов ключевых слов:
def func1(**qwargs):
func2(**qwargs)
func3(**qwargs)
Я хотел бы указать некоторые аргументы по умолчанию в некоторых последующих вызовах функций, например:
def func1(**qwargs):
func2(arg = qwargs.get("arg", default), **qwargs)
func3(**qwargs)
Проблема с этим подходом заключается в том, что если arg находится внутри qwargs, возникает ошибка TypeError с сообщением «получено несколько значений для аргумента ключевого слова».
Я не хочу устанавливать qwargs["arg"] по умолчанию, потому что тогда func3 получит этот аргумент без ордера. Я мог бы сделать copy.copy qwargs и установить «arg» в копии, но qwargs могут иметь в нем большие структуры данных, и я не хочу их копировать (возможно, copy.copy не будет, только copy.deepcopy ?).
Что тут питонического делать?
qwargs
звучит как данные, аfunc*
звучит как методы. Вы не думали о том, чтобы объединить их в один класс? Если вы сделаете это, то подписьfunc2
может быть упрощена до чего-то вродеfunc2(self,arg=default)
... - person unutbu   schedule 30.04.2010