您不能使用lambda
正文中的聲明,這就是爲什麼您會收到該錯誤,lambda
只能預期表達式。
但是在Python 3 exec
是一個功能和在那裏工作罰款:
>>> t = lambda x: exec(x)
>>> t("print('hello')")
hello
在Python 2,你可以使用compile()
與eval()
:
>>> t = lambda x: eval(compile(x, 'None','single'))
>>> strs = "print 'hello'"
>>> t(strs)
hello
幫助上compile()
:
compile(...)
compile(source, filename, mode[, flags[, dont_inherit]]) -> code object
Compile the source string (a Python module, statement or expression)
into a code object that can be executed by the exec statement or eval().
The filename will be used for run-time error messages.
The mode must be 'exec' to compile a module, 'single' to compile a
single (interactive) statement, or 'eval' to compile an expression.
The flags argument, if present, controls which future statements influence
the compilation of the code.
The dont_inherit argument, if non-zero, stops the compilation inheriting
the effects of any future statements in effect in the code calling
compile; if absent or zero these statements do influence the compilation,
in addition to any features explicitly specified.
'exec'在python2中不是函數,它是一個聲明。你不能在'lambda'中使用語句。你真的需要一個'lambda'嗎?你不能定義一個正常的功能嗎? – SilentGhost
使用不同的編程語言從SICP等非平凡的教科書中學習是一個好主意,在那個你不完全熟悉的教科書中學習。在你解決這個問題後,你肯定會遇到其他的問題,例如[關閉中的任務](http://stackoverflow.com/questions/7535857/why-doesnt-this-closure-modify-the-variable-在封閉作用域中)或者[使用循環創建閉包](http://stackoverflow.com/questions/233673/lexical-closures-in-python)。 Python是一門偉大的語言,但它不是Scheme的簡單替代品。 – user4815162342