0 / 0 / 0
Регистрация: 26.01.2019
Сообщений: 4

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

16.04.2020, 12:31. Показов 1895. Ответов 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
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,707
Записей в блоге: 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru