当前位置: 首页 > 面试题库 >

在Python中使用eval?

段哲圣
2023-03-14
问题内容

eval()我在玩耍时偶然发现了Python中的一个函数。我想不出需要此功能的情况,除了可能是语法糖。谁能举一个例子?


问题答案:

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

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

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



 类似资料:
  • 问题内容: 我有一个使用100%Java编写的大型现有代码库,但是我想在它的一些新部分中使用Python。我需要进行一些文本和语言处理,而我宁愿使用Python和类似NLTK的库来执行此操作。 我知道Jython项目,但这似乎代表了一种从Python内部使用Java及其库的方法,而不是相反的方式-我对此是否错? 如果没有,那么在Java和Python之间进行交互的最佳方法是什么,这样(理想情况下)

  • 问题内容: 我正在浏览文档,并遇到了以下示例: 我不明白的是这里的lambda和学生是什么?可以用其他任何名称代替它们吗?和什么做的?这有点模棱两可,因为我以前从未遇到过。 问题答案: 从语义上说: 与此相同: 只是为函数定义提供了另一种语法。结果是一个函数对象,就像由创建的对象一样。但是,有些功能是功能无法完成的,例如定义新变量。它们非常适合(取决于您要问的人)创建较小的一次性功能,例如此功能。

  • 问题内容: 我需要使用python处理XSLT,目前我正在使用仅支持XSLT 1的lxml,现在我需要处理XSLT 2,有没有办法在Python中使用saxon XSLT处理器? 问题答案: 有两种可能的方法: 设置一个接受转换请求的HTTP服务,并通过从Java调用Saxon来实现它们;然后您可以通过HTTP通过Python发送转换请求 使用Saxon / C产品 (当前在预发行版中可用) :此

  • 问题内容: 我正在寻找可以解释如何使用而不是的基础知识。 我的问题是尝试使用一个类的方法/函数返回数据,然后将数据放入另一个方法/函数中。在这种情况下,也许更简单的方法会更好,但是我试图了解类是如何工作/使用的。这个问题似乎取决于,这是我试图对此进行相当简单的使用。 尽管问题不完全相同,但我遵循的是Python The Hard Way,ex42 —循环@第18-41行。 我尝试编写一个,并改用,

  • 我得到了我的旋转值从OPI0到我的电脑,现在我想让一个物体在我的陀螺仪面对的方向旋转(度数值从180到-180)我对Python相当陌生。glRotatef(1,xrot,yrot,zrot)只设置当前旋转的旋转。但是我实际上想要的是,如果它是180度,我想把它放到180度。这可以通过获取当前旋转来归档,测试它是否变小或变大,然后调整旋转或用命令设置旋转到度数值。所以我的主要问题是:有没有设置创建

  • 本章介绍如何使用Python编程语言对JSON对象进行编码和解码。让我们从准备环境开始,使用Python for JSON开始编程。 环境 在开始使用Python编码和解码JSON之前,需要安装任何可用的JSON模块。在本教程中,我们已经下载并安装了Demjson,如下所示 $tar xvfz demjson-1.6.tar.gz $cd demjson-1.6 $python setup.p