Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 28, 2009 21:34:56

nJLyTo
От:
Зарегистрирован: 2008-11-11
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Написание callback функции

Требуется вызывать функцию по имени, переданного как аргумент другой функции. Первое, что придумал это использовать apply(). Но это один из вариантов, хотелось бы посмотреть другие варианты. Заранее благодаря.

def foo(*pr):
print pr

def set(arg):
apply(arg, (1,))

set(foo)



Офлайн

#2 Фев. 28, 2009 22:23:15

sky
От:
Зарегистрирован: 2008-05-26
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Написание callback функции

аргумент это ссылка или строка?
если строка
то можно так

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)

Офлайн

#3 Фев. 28, 2009 22:42:42

nJLyTo
От:
Зарегистрирован: 2008-11-11
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Написание callback функции

Пока точно не решил, но думаю, что сделаю объект в качестве аргумента. Код работает, спасибо.



Офлайн

#4 Март 1, 2009 15:42:14

Cleric
От:
Зарегистрирован: 2007-06-26
Сообщения: 87
Репутация: +  0  -
Профиль   Отправить e-mail  

Написание callback функции

Почему нельзя просто вызвать arg из set?
Плюс еще apply устарел



Офлайн

#5 Март 2, 2009 07:40:12

AlexKiriukha
От:
Зарегистрирован: 2008-02-03
Сообщения: 81
Репутация: +  0  -
Профиль   Отправить e-mail  

Написание callback функции

А что мешает вместо apply(arg, (1,)) использовать просто arg(1)? apply устарел и вроде как не нужен. И там ещё в коде используется set, а это название типа, т.е. так делать крайне не рекомендуется.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version