Синтаксическая ошибка при использовании присваивания (лямбды) в eval ()? - PullRequest
4 голосов
/ 16 июня 2011

Почему, когда я набираю следующее

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 ]

11 голосов
/ 16 июня 2011

Вы хотите использовать exec вместо eval. Я не знаю, почему вы хотели бы сделать это, хотя, когда вы можете просто использовать mult = lambda x,y : (x*y)

>>> exec("mult = lambda x,y : (x*y)")
>>> mult
<function <lambda> at 0x1004ac1b8>
>>> mult(3,6)
18
9 голосов
/ 16 июня 2011

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 голосов
/ 16 июня 2011
mult = eval("lambda x,y: (x*y)")
...