2011-06-16 37 views
3

爲什麼當我鍵入以下在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來表達我心中的內容。

+2

似乎是一個很大的努力,以動態地創建變量,今天的問題。我不記得需要以真實的代碼做這件事。 – 2011-06-16 06:25:53

+0

我搞砸了一個寫得很差的Python後綴語言 – tekknolagi 2011-06-16 07:10:43

+1

您可能會感興趣http://stackoverflow.com/questions/8696602/python-3-2-1-execx-y-sets-a-value-in -a-toy-example-but-in-the-full – 2012-01-16 05:09:45

回答

10

你想用exec,而不是EVAL。我不知道你爲什麼會想這樣做,雖然時,你可以使用mult = lambda x,y : (x*y)

>>> exec("mult = lambda x,y : (x*y)") 
>>> mult 
<function <lambda> at 0x1004ac1b8> 
>>> mult(3,6) 
18 
+0

如果我有一個函數並且想要返回調用'mult(x,y)'的值,該怎麼辦? – tekknolagi 2011-06-16 05:59:12

+0

@tekknolagi:我不確定你的意思?調用'mult(x,y)'返回值。 – GWW 2011-06-16 06:00:19

+0

這不可靠。特別是,這個*不會在函數內部的Python 3.x中工作。 – 2012-01-16 05:08:14

8

Eval執行表達式,它不分配。

>>> eval("lambda x,y: y*x") 
<function <lambda> at 0xb73c779c> 
>>> eval("lambda x,y: y*x")(2, 4) 
8 

必須在eval'd表達賦值給一個變量:

>>> mult = eval("lambda x,y: y*x") 
>>> mult(2, 3) 
6 
2
mult = eval("lambda x,y: (x*y)")