如何使用python从字符串定义函数

时间:2011-05-07 09:04:56

标签: python string function

这是我的代码:

a = \
'''def fun():\n
    print 'bbb'
'''
eval(a)

fun()

但它显示错误:

Traceback (most recent call last):
  File "c.py", line 8, in <module>
    eval(a)
  File "<string>", line 1
    def fun():
      ^
SyntaxError: invalid syntax

所以我该怎么做,

感谢

4 个答案:

答案 0 :(得分:13)

带有字符串参数的

eval()仅适用于表达式。如果要执行语句,请使用exec

exec """def fun():
  print 'bbb'
"""

但在此之前,请考虑一下您是否真的需要动态代码。到目前为止,大多数事情都可以不用。

答案 1 :(得分:3)

Eval仅计算表达式,而exec执行语句。

所以你尝试这样的事情

a = \
'''def fun():\n
    print 'bbb'
'''
exec a

fun()

答案 2 :(得分:2)

非表达式eval参数必须是compile - 首先; str仅作为表达式处理,因此完整语句和任意代码需要compile

如果您将其与compile混合使用,则可以eval任意代码,例如:

eval(compile('''def fun():
    print 'bbb'
''', '<string>', 'exec'))

上述工作正常,在Python 2和Python 3上的工作方式相同,与exec(Py2中的关键字和Py3中的函数)不同。

答案 3 :(得分:1)

如果您的逻辑非常简单(即一行),您可以评估一个lambda表达式:

a = eval("lambda x: print('hello {0}'.format(x))")
a("world") # prints "hello world"

正如其他人所提到的,如果可以,可能会best to avoid eval