eval中的函数定义

1 投票
1 回答
3290 浏览
提问于 2025-04-17 03:53

我想定义一个带有变量名称的函数。

这些名称是从数据库中获取的。对于每个名称,我想定义一个按钮,并且有不同的处理方式:

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)

只是想感受一下;在Python中这个是可以正常工作的。 但我使用的是pyjamas,最后的代码却引发了错误,提示:

 im1 TypeError: iter is undefined

看起来pyjamas还不支持eval()和exec()这两个功能。

理查德

1 个回答

9

这里有几个问题:

1) eval 是用来计算表达式的,不是用来执行语句的。

2) exec 需要把整个函数放在一个 exec 里,而不是像你那样分成多行。

3) 根据你想在函数里做什么,有很多更简单的方法来创建函数。告诉我们你真正想做的事情。

4) 你的循环可以更简单地写成:for t in title: blah blah t

撰写回答