Форум сайта python.su
Требуется вызывать функцию по имени, переданного как аргумент другой функции. Первое, что придумал это использовать apply(). Но это один из вариантов, хотелось бы посмотреть другие варианты. Заранее благодаря.
def foo(*pr):
print pr
def set(arg):
apply(arg, (1,))
set(foo)
Офлайн
аргумент это ссылка или строка?
если строка
то можно так
def ky():print 'ky'
def call_string(arg):globals()[arg]() # arg строка
call_string('ky')
# второй способ
def call_object(arg):arg() # есди arg ссылка на обьект...
call_object(ky)
#еще один вариант
def call_string2(arg):globals()[arg].__call__()
call_string2('ky')
Отредактировано (Фев. 28, 2009 22:25:30)
Офлайн
Пока точно не решил, но думаю, что сделаю объект в качестве аргумента. Код работает, спасибо.
Офлайн
Почему нельзя просто вызвать arg из set?
Плюс еще apply устарел
Офлайн
А что мешает вместо apply(arg, (1,)) использовать просто arg(1)? apply устарел и вроде как не нужен. И там ещё в коде используется set, а это название типа, т.е. так делать крайне не рекомендуется.
Офлайн