Skip to main content
 首页 » 编程设计

python之eval 中的函数定义

2025年05月04日10itcoder

我尝试用变量名定义一个函数。

名称是从数据库中检索的。我想为每个名称定义一个按钮并进行单独处理:

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 下这工作正常。 但我使用睡衣,最后的代码确实引发了错误说明

 im1 TypeError: iter is undefined 

睡衣似乎还不支持 eval() 和 exec()。

理查德

请您参考如下方法:

这里有很多问题:

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

2) exec 需要将整个函数放在一个 exec 中,而不是像您拥有的那样拆分成单独的行。

3) 有更简单的方法来创建函数,这取决于你想要在 body 中拥有什么。告诉我们您真正想做什么。

4) 你的循环要简单得多:for t in title: blah blah t。