LINUX.ORG.RU

Python, вызов функции по имени в строковой переменной

 


1

1

Название не совсем правильное, т.к. не знал как назвать. Дело вот в чём, начинаю изучать классы в python и столкнулся с проблемой. Допустим есть модуль ololo, в котором есть функция, которая должна обрабатываться в другой функции, имя которой я передаю через параметр.

файл main

import ololo

ololo.func1('func2')

def func2:
    print 'func2'

модуль ololo:

def func1(funcname): 
    return globals()[funcname]()
Так вот, как сделать чтобы в ololo можно было вызвать функцию, которая находится в main?)

Я ничего не понял, но что тебе мешает сделать так:

ololo.func1(func2)
def func1(funcname): 
    return funcname()
tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

Я не понял что вы хотели этим сказать, но func1 должна быть в ololo

WiseAlex ()
Ответ на: комментарий от tailgunner

Ну во первых у функции есть параметры, а во вторых мне имя функции отдельно нужно ещё. Да и проблема не в этом же

WiseAlex ()

Функции в питоне первоклассные, её и передавай.

aedeph_ ★★ ()
Ответ на: комментарий от WiseAlex

Ну во первых у функции есть параметры

В твоем примере их нет. Но, если они есть, подставь их в вызов - никаких проблем.

Да и проблема не в этом же

Пока ты не объяснишь, в чем проблема, тебе никто не поможет.

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

Ну я вроде объяснил в чём, видимо непонятно)

Когда функция выполняется в ololo и вызывается функция из main, то её как я понял не видно в ololo)

WiseAlex ()
Ответ на: комментарий от WiseAlex

А с чего она должна быть видна? Ты ее туда импортировал?

aedeph_ ★★ ()
Ответ на: комментарий от aedeph_

Ну так в том то и дело, что нет. модуль ololo импортирован в main, хорошо бы обработать функцию из ololo в main.

WiseAlex ()
Ответ на: комментарий от WiseAlex

Ну я вроде объяснил в чём, видимо непонятно)

Я думаю, ты и сам не понимаешь, чего хочешь. Попробуй выполнить тот вариант кода, что я дал.

tailgunner ★★★★★ ()
aiv@aivbook:~/tmp$ cat > ololo.py
def f(g): print g.func_name; g()
aiv@aivbook:~/tmp$ cat > main.py
import ololo
def f_main(): print 12345
ololo.f(f_main)
aiv@aivbook:~/tmp$ python main.py 
f_main
12345
AIv ★★★★★ ()
Ответ на: комментарий от Virtuos86

Чё портить то? Мне нужно работать с модулем независимо от него, т.е. ничего в нём не меняя. Для этого оно и нужно было.

WiseAlex ()
Ответ на: комментарий от WiseAlex

Функции в питоне первоклассные, её и передавай.
aedeph_ (01.05.2013 13:46:48)

Первоклассные? Это как?)
WiseAlex (01.05.2013 13:47:31)


Что функции в питоне first class object надо бы знать. Ну и в целом, по ответам в треде видно, что «плаваешь». А значит, быдлокодить будешь :/.

И я тебя не оскорбить хотел, а дать понять советчику, что для тебя полезнее было бы самому нарыть ответ, глядишь, какие вещи уяснил бы себе, знание языка подтянул.

Virtuos86 ★★★★★ ()
Ответ на: комментарий от Virtuos86

А я как оскорбление и не принял. На Python только для себя пишу, учусь по-маленьку.

WiseAlex ()
Ответ на: комментарий от AIv

Лень, потому что ничего серьёзного писать на Python не буду.

WiseAlex ()
Ответ на: комментарий от anonymous

Устаревшая, но ничего лучше (по стилю изложения) пока увы не написано. ИМНО.

AIv ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.