0
点赞
收藏
分享

微信扫一扫

Python 教程:eval()和exac()详细用法以及区别


一、eval()

1. 描述

eval()执行一个字符串,返回表达式的值。

2. 语法

eval(expression[, globals[, locals]])

  • expression:表达式
  • globals:变量作用域,全局命名空间(存放全局变量),如果被提供,必须是字典。
  • locals:变量作用域,局部命名空间,如果被提供,可以是任何映射对象。

返回值:

表达式计算结果。

3. 实例

result = eval('pow(2, 2)')
print(result)

result = eval('3*x', {'x': 7})
print(result)

输出:

4
21

二、exec()

1. 描述

exec执行存储在字符串或文件中的 Python 语句,相比eval,exec 可执行更复杂的代码。

2. 语法

exec(object[, globals[, locals]])

  • object:必选参数。如果 object 是字符串,会被解析为 Python 语句再执行,如果是代码,直接执行。
  • globals:可选参数。全局命名空间(存放全局变量),如果被提供,必须是字典。
  • locals:可选参数。局部命名空间。如果被提供,可以是任何映射对象。当和 globals 有重复,以 locals 为准。

返回值:

永远是None。

3. 实例

x = 10
expr = """
z = 30
sum = x + y + z
print(sum)
"""

def func():
y = 20
exec(expr)
exec(expr, {'x': 1, 'y': 2})
exec(expr, {'x': 1, 'y': 2}, {'y': 3, 'z': 4})
func()


a = 10
b = 20
c = 30
g = {'a': 6, 'b': 8} # 定义一个字典
t = {'b': 100, 'c': 10} # 定义一个字典
print(eval('a+b+c', g, t)) # 定义一个字典 116

输出:

60
33
34

116

三、exal()与exac()的区别、易错点

1. 区别

eval()有返回值,exec()无返回值。

2. 易错点

eval()、exac()的第一个参数是字符串,字符串的内容必须是可执行代码。

s = 'hello'
print(eval(s))
print(exec(s))

输出:

NameError: name 'hello' is not

出错原因:字符串的内容是 hello,而 hello 不是可执行代码。

s = 'hello'
print(eval('s'))
print(exec('s'))

输出:

hello
None

字符串的内容是 ‘hello’,是字符串,字符串是可执行代码。

使用repr()转化,但使用str()转换会报错。

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
s = "hello"
print(eval(repr(s)))
print(eval(str(s)))

输出:

hello

NameError: name 'hello' is not

出错原因:repr()返回的内容,多一个单引号。

s = 'hello'
print(repr(s))
print(str(s))

输出:

'hello'


举报

相关推荐

0 条评论