Я пытаюсь запустить симуляцию в Python. Для этого мне нужно определить ряд параметров и получить от них некоторые другие. Используя их, я вызываю несколько функций, которые действуют на эти параметры и возвращают определенный результат. В настоящее время мой код выглядит примерно такpythonic way для функции с множеством параметров и возвращаемыми значениями
common(ai, bi, ..., hi):
# calculations
return ao, bo, ..., fo
func1(ai, bi, ..., xi):
ao, bo, ..., fo = common(ai, bi, ..., hi)
# calculations specific to func1
return y
func1(ai, bi, ..., xi):
ao, bo, ..., fo = common(ai, bi, ..., hi)
# calculations specific to func2
return z
ai = 0
bi = 1
...
xi = 2
print(func1(ai, bi, ..., xi))
print(func2(ai, bi, ..., xi))
где я сокращенном список параметров т.д., с ...
и расчеты выполняются в # calculations
разделах.
Я бы предпочел назвать функции с помощью func1(di=2)
и иметь значение по умолчанию для всех остальных. Это, однако, означает использование именованных аргументов, и в этом случае я должен дважды указывать значения по умолчанию (в func1
и в func2
). Я не думаю, что **kwargs
будет работать здесь, так как это потребует передачи значений по умолчанию явно.
Я занимался компромиссом передачи словаря функциям и установки нестандартного аргумента перед его передачей. Это делает вызов функции намного сложнее понять, поэтому я почувствовал, что должен быть более простой способ сделать это.
Поскольку функции состоят только из относительно длинных уравнений, я не хочу добавлять символы в имена переменных, как это требуется при их хранении в словаре и просто называть их оттуда. Это делает чтение уравнений намного сложнее.
Мой вопрос в том, есть ли пифонический способ решить эту проблему.
Вы пробовали с абстрактными классами? – AreTor