| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Python: Общие вопросы > Функция с переменным числом аргументов |
| Автор: dizzy1984 11.11.2009, 15:19 | ||||
Есть функция
и функция
Можно ли создать функцию из которой я могу вызвать любую из этих, заданную в качестве аргумента? пример f3( f1, 1, 2 ); f3( f2, 1) ? |
| Автор: pythonwin 11.11.2009, 16:00 | ||
|
| Автор: dizzy1984 12.11.2009, 08:23 | ||
| Т.е получается, что обе функции должны быть оформлены, как функции с переменным числом аргументов? Вроде такого
|
| Автор: dizzy1984 19.11.2009, 17:18 |
| Спасибо! |
| Автор: Virtuos86 15.1.2010, 14:35 | ||
А что функция apply уже устарела?
|
| Автор: Артемий123 18.1.2010, 21:15 |
| горю,програмисты! третий день бьюсь над тем, чтобы написать универсальный цикл для поиска максимума функции с n-ным количеством переменных,пришел к тому,что получается цикл while в таком же цикле while n-ое количество раз и каждый цикл со своей переменной. а нужно как-то от этого уйти, может есть какой-то команда которая поможет мне избавиться от этой бесконечности? ниже привожу пример того на чем остановился: def f(x,z): return sin(x)-cos(z) x2=10*pi z2=5*pi e=0.1*pi y1=f(x,z) ymax=y1 xmax=x zmax=z while x<x2: x=x+e y2=f(x,z) if y2>y1: ymax=f(x,z) xmax=x zmax=z y1=f(x,z) while z<z2: z=z+e y2=f(x,z) if y2>y1: ymax=f(x,z) xmax=x zmax=z y1=f(x,z) print ymax,xmax,zmax это для двух переменных, для трех соответсвенно на один цикл больше и т.д. как это записать? помогите чем можете. Добавлено через 13 минут и 33 секунды |
| Автор: Леопольд 19.1.2010, 01:56 |
| Артемий123, обычно дать ответ сложнее чем задать вопрос. Может задашь вопрос так, что-бы тебя поняли? Этот кусок кода, который ты привёл, вообще не рабочий, просто непонятно что вообще за x и z такие. Они нигде не инициализируются. Python обладает большими возможностями, наверняка есть простое решение, только объясни что тебе надо конкретно. Не жди что каждый будет ломать голову в надежде понять что именно ты хочешь. |
| Автор: Virtuos86 19.1.2010, 13:02 | ||
| Я так понял, что в лоб будет трудно решить такую задачу. В решении появляется факториал от числа аргументов функции, т.е. при приличном количестве аргументов время работы программы резко возрастет. Поэтому нужно включать голову.
1. Берем выражение, по которому вычисляется результат - "sin(x) - cos(z)". 2. Находим максимальные значения положительных членов этого выражения. Здесь это "sin(x)", но могут быть и другие. Например, x изменяется от -pi до 5*pi. Куда там x подставляется, в sin? Находим максимум sin(x) для заданного для x интервала. И так по всем членам выражения(sin(x) и остальные члены со знаком плюс). 3. Аналогично находим минимальные значения отрицательных членов выражения(-cos(y) и т.д.) 4. Находим значение выражения, подставляя полученные значения. 5. Вот и результат. |
| Автор: shupg 19.1.2010, 15:46 | ||||||
Хотя мне кажется дело не в этом..
Мне кажется, что подобные задачи лучше решать с помощью математики, чем с помощью автоматизированного перебора. Тригонометрия в помощь!
Насчёт того, что аргументов и функция может быть другая может быть много: попробуй почитать что-н-ть типа того: http://radiomaster.ru/articles/view/137/ Просто автоматизируя "на голую". |
| Автор: powerfox 19.1.2010, 16:45 |
| Модератор: Пожалуйста, один топик - один вопрос. Артемий123, как бы вы ни горели, создайте отдельную тему. Кроме того, для кода нужно использовать подсветку синтаксиса, а так же учитывать, что телепатов здесь нет. |