使用exec并在python中编译

时间:2014-03-23 16:59:41

标签: python dictionary compilation exec

我想要一个字典,其中值是一个语句。我不需要动态构建语句。声明中出现的名称位于本地范围内。下面是一个简单的例子。似乎'exec'是使用的东西,但这似乎是不受欢迎的,并且可能很慢。此代码将用于随机建模器,并将运行数千次。你能告诉我如何最好地完成这个想法(也许是通过预编译?)。难道我已经拥有了这个权利吗?

干杯!

杰夫

d={'plusone':'x+=1','minusone':'x-=1'}
x=2
exec(d['plusone'])
print x  ::: output '3'
exec(d['minusone'])
print x  ::: output '2'

1 个答案:

答案 0 :(得分:0)

据推测,您在定义exec(d['plusone'])的某个范围内正在执行x,否则您将获得NameError

将callable放入dict并明确传递x(并明确指定给x)似乎要好得多:

from operator import add, sub

d={'plusone':lambda x: add(x,1), 'minusone':lambda x: sub(x,1)}

x = 2

x = d['plusone'](x)

x
Out[17]: 3