为什么"a+b",{'a':100,'b':100} 是一个有效的表达式

在尝试eval的用法时看到这类写法:

print (eval("a+b",{'a':100,'b':100}))

为什么这里 字典当成参数赋值直接向”a+b” 传递?
基本的语法语句里面看到不这样的赋值。
不解。
谢谢!

Jason990420
最佳答案
eval("a+b", {'a':100,'b':100})

内置函数 eval 定义为

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

所以, 在这里提供给 eval 函数的两个参数为

  • "a+b" 才是 expression 表达式的字符串
  • {'a':100,'b':100} 则为 globals 全局字典, 作为全局命名空间;

也就是使用 globals 全局字典中的变量值来解析 expression 表达式的字符串.

细节请参考 eval

注: 如果不考虑函数 eval, "a+b", {'a':100,'b':100} 也是一个合法的表达式, 相当于一个tuple ("a+b", {'a':100,'b':100}).

2年前 评论
讨论数量: 1
Jason990420
eval("a+b", {'a':100,'b':100})

内置函数 eval 定义为

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

所以, 在这里提供给 eval 函数的两个参数为

  • "a+b" 才是 expression 表达式的字符串
  • {'a':100,'b':100} 则为 globals 全局字典, 作为全局命名空间;

也就是使用 globals 全局字典中的变量值来解析 expression 表达式的字符串.

细节请参考 eval

注: 如果不考虑函数 eval, "a+b", {'a':100,'b':100} 也是一个合法的表达式, 相当于一个tuple ("a+b", {'a':100,'b':100}).

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!