определение функции в eval - PullRequest
       29

определение функции в eval

1 голос
/ 07 октября 2011

Я пытаюсь определить функцию с именем переменной.

Имена извлекаются из базы данных.Для каждого имени я хочу определить кнопку и иметь отдельную обработку:

title=['BNL','CE']
for i in range(0,len(title)):
    panelvpu.add(Button(title[i]))


for i in range(0,len(title)):
    eval('def onButtonClick'+title[i]+'(self, event):')
    eval('    Window.alert("Yes")')

Определение кнопки в порядке, но обработка события в определенной функции дает ошибку

im1 SyntaxError: at index 4 in "def onMenu1Item1(self): 
Window.alert("Item 1 selected")": expected ';', got 'onMenu1Item1'

После обратной связи я изменил это на

    title=['BNL','CE']
    for t in title : panelvpu.add(Button(t))

for t in title:        
    def_code = "print t"
    exec(def_code)

Просто чтобы получить ощущение;под питоном это работает нормально.Но я использую пижаму, и последний код выдает ошибку, заявляющую

 im1 TypeError: iter is undefined

Похоже, что пижама еще не поддерживает eval () и exec ().

Ричард

1 Ответ

9 голосов
/ 07 октября 2011

Здесь есть ряд проблем:

1) eval предназначен для вычисления выражения, а не для выполнения операторов.

2) exec потребуется целая функция в одномexec, а не разбивать на отдельные строки, как у вас есть.

3) Есть гораздо более простые способы создания функций, в зависимости от того, что вы хотите иметь в теле.Расскажите нам о том, что вы действительно хотите сделать.

4) Ваш цикл намного проще: for t in title: blah blah t.

...