使用exec 和 eval 执行和求值字符串
来源:互联网 发布:java string 换行符 编辑:程序博客网 时间:2024/05/21 03:56
1.exec
执行一个字符串的语句是exec:
>>> exec "print 'Hello world'"
但是,使用简单形式的exec语句绝不是好事,很多情况下可以给他提供命名空间-可以放置变量的地方,你想这样做,从而使代码不会干扰命名空间,比如下面代码中使用的名称sqrt:
from math import sqrtexec("sqrt = 4")sqrt(4)Traceback (most recent call last): File "C:\Users\Administrator\eclipse-workspace\Web_Authentication\ShellExec.py", line 3, in <module> sqrt(4)TypeError: 'int' object is not callable
exec 语句最有用的地方在可以动态的创建代码字符串,如果字符串是从其他地方获得的–很有可能是用户—那么几乎不能确定其他到底包含什么代码,所以为了安全起见可以增加一个字典,起命名空间的作用。
可以通过增加in来实现,其中就是起到放置代码字符串命名空间作用的字典。
from math import sqrtscope={}exec('sqrt=1',scope)sqrt(4)2.0scope['sqrt']1
潜在的破坏性代码并不是覆盖sqrt函数,原来的函数能正常工作,而通过exec 赋值的变量sqrt只在它的作用域内有效。
注意,如果需要将scope打印出来的话,会看到其他有用的东西,因为内建的builtins 字典自动包含所有内建函数和值:
scope['sqrt']1len(scope)2scope.keys()dict_keys(['__builtins__', 'sqrt'])
阅读全文
0 0
- 使用exec 和 eval 执行和求值字符串
- python中eval和exec的使用
- exec和eval语句
- python exec和eval
- Python exec 和 eval
- Python 中的 exec 和 eval
- python eval,和 exec模块
- Python eval() 和 exec()函数
- eval和exec的区别
- Python 执行字符串表达式函数(eval exec execfile)
- python中eval, exec, execfile,和compile
- python中eval, exec, execfile,和compile
- python中eval, exec, execfile,和compile
- python中eval, exec, execfile,和compile
- python中eval, exec, execfile,和compile
- python中eval, exec, execfile,和compile
- python中eval, exec, execfile,和compile
- python中eval, exec, execfile,和compile
- easyui textbox 失去焦点事件及获取文本框的内容
- Leetcode 198. House Robber
- 【C++】引用变量
- 暗黑DB3 20秒退出问题处理
- mac 电脑配置 android dx命令
- 使用exec 和 eval 执行和求值字符串
- EffectiveJava(笔记七) 通用程序设计
- 如何安装xrdp的最新版
- Mybatis基础,以及标签使用
- 哪怕给人打工也要打造自己的品牌
- pip 安装 opencv
- 防火墙安装的十步骤,加强网络第一道保护屏
- MVC POST 的方法总结
- 【python】Python中split函数的用法