问题描述
我想要一个字典,其中的值是语句。 我不需要动态地构建语句。 语句中出现的名称在本地范围内。 下面是一个简单的示例。 似乎“ 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楼
大概您在定义x
某个范围内执行exec(d['plusone'])
,否则您将得到NameError
。
将可调用对象放入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