Я занимаюсь научным программированием и часто хочу показать пользователям подсказки и пары переменных, позволить им редактировать переменные, а затем выполнять вычисления с новыми переменными. Я делаю это так часто, что я написал класс wxPython для перемещения этого кода из основной программы. Вы создаете список для каждой переменной с типом переменной (string, float, int), приглашением и текущим значением переменной. Затем вы помещаете все эти списки в один большой список, и моя утилита создает аккуратно отформатированную панель wxPython с подсказками и текущими значениями, которые можно редактировать.
Когда я начинал, у меня было всего несколько переменных, поэтому я выписывал каждую переменную.
s='this is a string'; i=1; f=3.14
my_list=[ ['s','your string here',s], ['i','your int here',i], ['f','your float here'],]
input_panel = Input(my_list)
# the rest of the window is created, the input_panel is added to the window, the user is
# allowed to make choices, and control returns when the user hits the calculate button
s,i,f = input_panel.results() # the .results() function returns the values in a list
Теперь я хочу использовать эту процедуру для многих переменных (10-30), и этот подход не работает. Я могу создать входной список для функции в несколько строк, используя операторы list.append (). Когда код возвращается из функции, я получаю этот огромный список, который нужно распаковать в нужные переменные. С этим трудно справиться, и, похоже, будет легко вывести список ввода и список вывода из синхронизации. И что еще хуже, это выглядит глупо.
Каков наилучший способ передать множество переменных в функцию в Python с дополнительной информацией, чтобы их можно было редактировать, а затем вернуть переменные, чтобы я мог использовать их в остальной части программы?
Если бы я мог передать переменные по ссылке в функцию, то пользователи могли бы изменить их или нет, и я бы использовал значения, как только программа вернулась из функции. Мне нужно будет только построить список ввода из нескольких строк, и не будет никакой возможности, чтобы список ввода не синхронизировался со списком вывода. Но Python этого не позволяет.
Стоит ли разбивать большие списки на меньшие списки, которые затем объединяются в большие списки для передачи в функции и из них? Или это просто добавляет больше мест для ошибок?