Что такое наиболее эффективный (с точки зрения скорости обработки и использования памяти) метод для передачи большого количества пользовательских входных переменных в качестве аргументов функции и для возврата нескольких результатов?Самый эффективный способ передать несколько аргументов функции?
Длинная строка аргументов и возвращаемых значений каждый раз, когда я вызываю функцию - например. (a, b, c, d, e, f, g) = MyFunction (a, b, c, d, e, f, g) - кажется неэлегантным, и я предполагаю, что это также неэффективно; особенно если мне нужно вызвать функцию повторно или рекурсивно.
Однако определение всего списка переменных как глобального вне функции также является уродливым и несет в себе опасность того, что имена переменных будут непреднамеренно назначены нескольким переменным по мере роста моей программы.
Я попытался поместить все переменные в один массив или список и передать это функции как один аргумент, поскольку это кажется более аккуратным. Правильно ли я считаю, что это также более эффективно, даже для огромных массивов, поскольку это только указатель на начало массива, который передается функции каждый раз, а не весь массив? Если массивы являются наилучшим способом передачи большого числа переменных в/из функции, в какой момент это эффективное экономичное срабатывание - например, лучше ли передавать строку аргументов, если число аргументов меньше 5, но использовать массив или список, если требуется 5 или более аргументов?
Предыдущее обсуждение по StackExchange: Elegant way to pass multiple arguments to a function рекомендовал использовать struct вместо векторов/массивов для передачи нескольких аргументов. Почему этот метод предпочитает использовать массивы, и в какой момент эффективность экономии оправдывает дополнительную сложность использования структуры?
Есть ли какие-либо другие методы, которые я должен рассмотреть, которые будут работать в Python или C/C++? (например, я новичок в объектно-ориентированное программирование, но интересно, если это может предложить решение, которое специфично в Python?)
Большое спасибо
Обычно вы бы передать структура, содержащая аргументы. Вы можете передать кортеж, я полагаю (более идиоматично для C++, но все еще не совсем там, на мой взгляд). – Robinson
Укажите язык, казалось бы, тот же вопрос на самом деле совсем другой для разных языков. –
Передача в кортеж или dict или собственный пользовательский объект – muddyfish