在eval()中使用赋值(lambda)时出现语法错误?
为什么我输入以下内容
eval("mult = lambda x,y: (x*y)")
会出现这个错误呢?这是怎么回事?
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1
mult = lambda x,y: (x*y)
^
SyntaxError: invalid syntax
我哪里出错了?如果我直接输入这个表达式(不使用 eval
),就不会出错,而且我可以随心所欲地使用 mult
。
3 个回答
2
当然可以!请看下面的内容:
在编程中,有时候我们需要让程序做一些事情,比如在特定的条件下执行某段代码。这就像给程序设定了一些规则,只有当这些规则被满足时,程序才会按照我们的要求去做。
例如,假设我们有一个程序,它需要检查一个数字是否大于10。如果这个数字确实大于10,程序就会打印出“这个数字很大!”;如果小于或等于10,程序就会打印出“这个数字不大。”这就是一个简单的条件判断。
在代码中,这种条件判断通常用“if”语句来实现。我们可以把“if”想象成一个门,只有当条件满足时,门才会打开,程序才会继续执行后面的代码。
希望这个解释能帮助你更好地理解编程中的条件判断!
mult = eval("lambda x,y: (x*y)")
9
Eval 是用来计算表达式的,它并不是用来赋值的。
>>> eval("lambda x,y: y*x")
<function <lambda> at 0xb73c779c>
>>> eval("lambda x,y: y*x")(2, 4)
8
你必须把计算出来的结果赋值给一个变量:
>>> mult = eval("lambda x,y: y*x")
>>> mult(2, 3)
6
12
你想用 exec 来代替 eval。我不太明白你为什么要这么做,因为你其实可以直接用 mult = lambda x,y : (x*y)
来实现相同的功能。
>>> exec("mult = lambda x,y : (x*y)")
>>> mult
<function <lambda> at 0x1004ac1b8>
>>> mult(3,6)
18