eval中的函数定义
我想定义一个带有变量名称的函数。
这些名称是从数据库中获取的。对于每个名称,我想定义一个按钮,并且有不同的处理方式:
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
。