Форум сайта python.su
0
Требуется вызывать функцию по имени, переданного как аргумент другой функции. Первое, что придумал это использовать apply(). Но это один из вариантов, хотелось бы посмотреть другие варианты. Заранее благодаря.
def foo(*pr):
print pr
def set(arg):
apply(arg, (1,))
set(foo)
Офлайн
0
аргумент это ссылка или строка?
если строка
то можно так
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)
Офлайн
0
Пока точно не решил, но думаю, что сделаю объект в качестве аргумента. Код работает, спасибо.
Офлайн
0
Почему нельзя просто вызвать arg из set?
Плюс еще apply устарел
Офлайн
0
А что мешает вместо apply(arg, (1,)) использовать просто arg(1)? apply устарел и вроде как не нужен. И там ещё в коде используется set, а это название типа, т.е. так делать крайне не рекомендуется.
Офлайн