时间的车轮滚滚而过,我终于学到代码审计了。
在 Python3 里面,主要有:
eval()
exec()
compile()
注:
python3 删去了execfile()
函数,代替方法如下:
with open('test1.py','r') as f:
exec(f.read())
在 Python2 里面,主要有:
eval()
execfile()
compile()
注:
需要说明的是在 Python2 中exec
不是函数,而是一个内置语句(statement),但是 Python 2 中有一个execfile()
函数。可以理解为 Python 3 把exec
这个 statement 和execfile()
函数的功能够整合到一个新的exec()
函数中去了。
功能: 将字符串当成有效的表达式来求值并返回计算结果。
语法:
eval(expression, globals= None, locals= None)
官方文档中的解释:
将字符串 str 当成有效的表达式来求值并返回计算结果。
globals(全局)和 locals(局部)参数是可选的,如果提供了globals参数,那么它必须是 dictionary 类型;
如果提供了 locals 参数,那么它可以是任意的 map 对象。
eval() 函数三个参数的用法可以参考此两篇博客,写的很清楚了:
总结来说,eval() 函数的第二、三个参数,也就是 globals
和 locals
是可以省略的,如果传入了,它们的作用是定义作用域的。globals
代表作用域为全局、locals
代表作用域为局部。如有冲突,以 locals
的作用域为准 。
第二三个参数分别指定能够在 eval 中使用的函数等,如果不指定,默认为 globals(