Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 26.01.2019
Сообщений: 4

Переменное число аргументов в функции python

16.04.2020, 12:31. Показов 1877. Ответов 8

Студворк — интернет-сервис помощи студентам
Здравствуйте, скажите пожалуйста, можно ли данную функцию как - нибудь преобразовать в функцию с переменным количеством аргументов?

Python
1
2
def ypred(inter, c1, c2, c3, c4, c5, s1, s2, s3, s4, s5):
  return inter*np.power(c1,s1)*np.power(c2,s2)*np.power(c3,s3)*np.power(c4,s4)*np.power(c5,s5)
количество аргументов "с" может варьироваться от 3 до 5
количество аргументов "s" такое же как и количество аргументов "с"

аргумент "с" принимает колонку DataFrame, а "s" принимает элемент массива

Python
1
2
3
4
5
n = len(dx)
y = np.empty(n)
for i in range(n):
  y[i]=ypred(intercept, dx['ind_vvp'][i], dx['ind_def_vvp'][i], dx['ind_pot_cen'][i], dx['brent'][i], dx['dollar'][i], coef[0],coef[1],coef[2],coef[3], coef[4])
  print(y[i])
Буду очень благодарна
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.04.2020, 12:31
Ответы с готовыми решениями:

Переменное число именованных аргументов
Здравствуйте, нуждаюсь в вашей помощи. Имеется такое вот задание: найти среднеквадратическое отклонение 4 чисел, используя в решении...

Создание функции, формирующую предложение из аргументов функции, аргументы . Аргументы - переменное число
Короче, вот бы всё норм. Хочу соединять, но он мне выдаёт ошибку, когда использую strcat. Не могу понять, с типами аргументов вроде проблем...

Переменное число аргументов
РАСПАКОВКА есть ли способы кроме рекурсии и передачи как списка инициализации?

8
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38169 / 21104 / 4307
Регистрация: 12.02.2012
Сообщений: 34,693
Записей в блоге: 14
16.04.2020, 13:46
А как ты собираешься отличать "с" от "s"?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.04.2020, 14:18
Цитата Сообщение от ValeriaMih Посмотреть сообщение
преобразовать в функцию с переменным количеством аргументов
Python
1
def ypred(inter, *c, *s)
А вот как ты собираешься их раскидывать по функциям - думай сама.
0
0 / 0 / 0
Регистрация: 26.01.2019
Сообщений: 4
16.04.2020, 16:34  [ТС]
Добавлено через 1 минуту
Цитата Сообщение от Garry Galler Посмотреть сообщение
А вот как ты собираешься их раскидывать по функциям - думай сам.
в этом и весь вопрос
до того как передать в функцию аргументы я дошла

Добавлено через 2 минуты
Цитата Сообщение от Catstail Посмотреть сообщение
А как ты собираешься отличать "с" от "s"?
эти буквы были взяты для примера, чтобы быстренько это реализовать.
Просто именно эта функция будет нужна в других местах, а датафреймы разного размера каждый раз
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.04.2020, 16:42
Цитата Сообщение от Garry Galler Посмотреть сообщение
def ypred(inter, *c, *s)
Вот так правильнее: def ypred(inter, *c, **s)
То есть в с будет список любой длины. В s все именованные аргументы.
Это как бы все. Далее вы должны просто извлекать нужные аргументы и передавать их функциям.

Добавлено через 1 минуту
coef[0],coef[1],coef[2],coef[3], coef[4]
Это неправильный способ передавать данные в функцию.
Правильно делать так: *coef. То есть вам не нужно выписывать все индексы и передавать их по одному: вы просто указываете, что вам нужны все.
Тоже самое можно делать с именованными параметрами.
0
0 / 0 / 0
Регистрация: 26.01.2019
Сообщений: 4
16.04.2020, 17:26  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
coef[0],coef[1],coef[2],coef[3], coef[4]
Это неправильный способ передавать данные в функцию.
Именно поэтому я и хочу преобразовать эту функцию.

Цитата Сообщение от Garry Galler Посмотреть сообщение
Вот так правильнее: def ypred(inter, *c, **s)
да, так и во всех туториалах написано

Цитата Сообщение от Garry Galler Посмотреть сообщение
Правильно делать так: *coef.
вот это уже ближе для понимания, но сколько я не пыталась у меня ошибка ключа. Тем более, я так понимаю, нужно будет цикл делать.
А именованные параметры тут не причем(как я понимаю), ну или как быть с колонками датафрейма?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.04.2020, 18:33
Цитата Сообщение от ValeriaMih Посмотреть сообщение
Тем более, я так понимаю, нужно будет цикл делать.
В pandas циклы не нужны.
Я вообще не понимаю зачем вы пытаетесь в функцию передавать кучу всяких значений, когда можно передать объект dataframe.

И вообще все операции c колонками выполняются проще - векторизовано:

Добавлено через 12 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
>>> import pandas as pd
>>> df = pd.DataFrame([[i+j for j in range(4)] for i in range(10)])
>>> df
   0   1   2   3
0  0   1   2   3
1  1   2   3   4
2  2   3   4   5
3  3   4   5   6
4  4   5   6   7
5  5   6   7   8
6  6   7   8   9
7  7   8   9  10
8  8   9  10  11
9  9  10  11  12
>>> y = df[0] * df[1]  * df[2]  * df[3]
>>> y
0        0
1       24
2      120
3      360
4      840
5     1680
6     3024
7     5040
8     7920
9    11880
dtype: int64
>>>
0
0 / 0 / 0
Регистрация: 26.01.2019
Сообщений: 4
16.04.2020, 18:40  [ТС]
Да, но я пока не понимаю как лучше сделать.
Дело в том, что мне нужно сделать регрессию и она нелинейная.
Я нахожу коэффициенты и кладу их в массив.
Далее мне нужно по функции (https://www.cyberforum.ru/cgi-bin/latex.cgi?y=inter*{{c}_{0}}^{{s}_{0}}*{{c}_{n}}^{{s}_{n}}) предсказать значения и сложить их в массив.
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
16.04.2020, 21:27
ValeriaMih, Вам все объяснил Garry Galler. Дальше, что бы понять то что он Вам объяснил, Вам нужно почитать теорию про передачу аргументов в функции.
Запись func(*lst) имеет разный смысл, в зависимости от того, где она используется, в определении функции или в вызове функции. В вызове функции такая запись распаковывает список, делая его элементы аргументами функции при ее вызове. При определении функции и при ее работе, такая запись наоборот упаковывает параметры функции в список, что бы потом работать с множеством этих параметров как с итерируемым объектом (со списком).
Поэтому при такой записи количество передаваемых аргументов может меняться при каждом вызове функции. Но что бы лучше это понять читайте теорию ( с примерами).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.04.2020, 21:27
Помогаю со студенческими работами здесь

Переменное число аргументов
Есть такой код. Хочу сделать, чтобы operator() принимал переменное число аргументов переменных типов. Т.е. передаём template<int,...

Переменное число аргументов
Доброго времени суток! В чем различия этих двух методов по получению аргументов? void test1(int a, ...) { int *b = &a; ...

Переменное количество аргументов в функции ( зацикливание )
Здравствуйте. Подскажите пожалуйста как правильно огранизировать доступ к каждому параметру. Заранее спасибо. Вот код: #include...

Необходимо написать функцию, которая обрабатывает переменное число аргументов
Создать скрипт, содержащий функцию с переменным числом аргументов. Функция должна выполнять следующее : 1.Подсчитать сумму всех...

Как задать переменное количество аргументов для чужой функции?
Помогите пожалуйста, имеется куча шаблонного кода когда выполняешь ExecSQLEx, например: if not...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru