我想要一个字典,其中值是一个语句。我不需要动态构建语句。声明中出现的名称位于本地范围内。下面是一个简单的例子。似乎'exec'是使用的东西,但这似乎是不受欢迎的,并且可能很慢。此代码将用于随机建模器,并将运行数千次。你能告诉我如何最好地完成这个想法(也许是通过预编译?)。难道我已经拥有了这个权利吗?
干杯!
杰夫
d={'plusone':'x+=1','minusone':'x-=1'}
x=2
exec(d['plusone'])
print x ::: output '3'
exec(d['minusone'])
print x ::: output '2'
答案 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