通过exec可以执行动态Python代码,类似Javascript的eval功能;而Python中的eval函数可以计算Python表达式,并返回结果(exec不返回结果,print(eval("…"))打印None);
>>> exec("print(\"hello, world\")") hello, world>>> a = 1 >>> exec("a = 2") >>> a 2
这里有个scope(命名空间,作用域)的概念,为了不破坏现在的scope,可以新建一个scope(一个字典)执行exec(Javascript没有此功能):
>>> scope = {} >>> exec("a = 4", scope) >>> a 2 >>> scope['a'] 4 >>> scope.keys() dict_keys(['a', '__builtins__'])
__builtins__包含了所有的内建函数和值;
而普通的{}不会包含__builtins__
>>> a = {} >>> a.keys() dict_keys([])
同exec一样,eval也可以使用命名空间:
>>> result = eval('2+3') >>> result 5 >>> scope={} >>> scope['a'] = 3 >>> scope['b'] = 4 >>> result = eval('a+b',scope) >>> result 7
主要内容:eval()和exec()的用法,exec()和eval()的区别,eval() 和 exec() 函数的应用场景eval() 和 exec() 函数都属于 Python 的内置函数,由于这两个函数在功能和用法方面都有相似之处,所以将它们放到一节进行介绍。 eval() 和 exec() 函数的功能是相似的,都可以执行一个字符串形式的 Python 代码(代码以字符串的形式提供),相当于一个 Python 的解释器。二者不同之处在于,eval() 执行完要返回结果,而 exec() 执
问题内容: 我在玩耍时偶然发现了Python中的一个函数。我想不出需要此功能的情况,除了可能是语法糖。谁能举一个例子? 问题答案: 并且是一种方便快捷的方法,可以动态地获取一些源代码,也许要稍加修改然后再执行- 但是,它们从来不是最好的方法,尤其是在生产代码中,而不是“快速而又简单”脏”的原型&c。 例如,如果我不得不处理这样的动态Python源代码,那么我会使用ast模块-比得多(比它更安全(您
exec语句用来执行储存在字符串或文件中的Python语句。例如,我们可以在运行时生成一个包含Python代码的字符串,然后使用exec语句执行这些语句。下面是一个简单的例子。 >>> exec 'print "Hello World"' Hello World eval语句用来计算存储在字符串中的有效Python表达式。下面是一个简单的例子。 >>> eval('2*3') 6
问题内容: 我一直在研究Python代码的动态评估,并遇到和函数以及该语句。 有人可以解释之间的区别和怎样的不同模式,适应吗? 问题答案: 简短答案,即TL; DR 基本上,用于EVAL审视你们单个动态生成的Python表达式,并exec用于EXEC动态生成的Python代码仅针对其副作用尤特。 并具有以下两个区别: eval仅接受一个表达式,exec可以使用具有Python语句的代码块:循环和函
问题内容: 我已经在多个地方多次看到过这种情况,但是从未找到令人满意的解释来说明为什么会这样。 因此,希望这里会介绍一个。为什么我们(至少通常)不使用和? 编辑:我看到人们以为这个问题与Web服务器有关,但事实并非如此。我可以理解为什么传递给未经处理的字符串可能很糟糕。在非Web应用程序中不好吗? 问题答案: 通常有更清晰,更直接的方法来获得相同的效果。如果构建复杂的字符串并将其传递给,则代码将难
问题内容: 我遇到了一些代码,将其作为可能的解决方案。现在,我从来没有使用过,但是,我遇到了很多有关它可能引起的潜在危险的信息。也就是说,我对使用它非常谨慎。 我的情况是我有一个用户输入: 哪里需要一本字典。我四处搜寻,发现可以解决这个问题。我认为我可以在尝试使用数据之前检查输入的类型,这将是可行的安全预防措施。 我通读了文档,但仍不清楚这是否安全。是否在输入数据后或调用变量后立即评估数据? 该a