Если у вас есть функция, которая имеет много аргументов по умолчанию
def lots_of_defaults(arg1 = "foo", arg2 = "bar", arg3 = "baz", arg4 = "blah"):
pass
и вы хотите передать различные значения некоторым из них, основываясь на том, что происходит в вашей программе, простым способом является использование **
для распаковки словаря имен аргументов и значений, которые вы создали на основе вашей программы логика.
different_than_defaults = {}
if foobar:
different_than_defaults["arg1"] = "baaaz"
if barblah:
different_than_defaults["arg4"] = "bleck"
lots_of_defaults(**different_than_defaults)
Преимущество этого состоит в том, что вы не засоряете ваш код в момент вызова вашей функции, если существует много логики, определяющей, что входит в ваш вызов. Вам нужно быть осторожным, если у вас есть какие-либо аргументы, которые не имеют значений по умолчанию, чтобы включить значения, которые вы передаете для них перед передачей словаря.