为了账号安全,请及时绑定邮箱和手机立即绑定

在Python中使用eval?

在Python中使用eval?

白衣非少年 2019-11-15 20:55:16
eval()我在玩耍时偶然发现了Python中的一个函数。我想不出需要此功能的情况,除了可能是语法糖。谁能举一个例子?
查看完整描述

3 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

eval并且exec是一种方便快捷的方法,可以动态地获取一些源代码,也许要稍加修改然后执行它-但是,它们从来都不是最好的方法,尤其是在生产代码中,而不是“快速且脏”的原型&c。


例如,如果我不得不处理这样的动态Python源代码,那么我会使用ast模块- ast.literal_eval比得多eval(如果它是一次性的,并且可以依赖于表达式的字符串形式,则可以直接以字符串形式调用它)仅在简单常量上,或者node = ast.parse(source)先执行,然后进行node遍历,也许与合适的访问者一起对它进行修改,例如进行变量查找,然后literal_eval是节点)-或者,一旦将节点置于适当的形状并对其进行安全性审查,我可以compile它(产生一个代码对象)并以此构建一个新的函数对象。远不那么简单(除非与最简单的情况ast.literal_eval一样简单eval!),但是在生产质量的代码中更安全,更可取。


对于许多任务,我见过的人(AB-)的使用exec和eval对,Python的功能强大的内置插件,如getattr和setattr,索引到globals(),&C,提供最好而事实上往往简单的解决方案。对于诸如JSON解析之类的特定用途,库类json更好,例如(例如,请参见SilentGhost对耳鸣的评论)。等等...


查看完整回答
反对 回复 2019-11-15
?
森林海

TA贡献2011条经验 获得超2个赞

在维基百科上的文章eval是非常翔实,并详细介绍了各种用途。


它建议的一些用途是:


评估数学表达式

编译器自举

脚本(一般来说,动态语言非常适合)

语言导师


查看完整回答
反对 回复 2019-11-15
  • 3 回答
  • 0 关注
  • 598 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信