Ironpython和未来的陈述

时间:2011-03-02 12:06:47

标签: silverlight ironpython dynamic-language-runtime

我在Silverlight项目中使用IronPython作为数学解析器与DLR:它可以工作,但在涉及除法的情况下计算不正确的结果,因为它有时使用整数而不是浮点数学(所以4/3返回1) 。 Google建议在python脚本中添加from __future__ import division,但这样做会在我尝试运行它时引发异常。

IronPython中是否支持__future__个语句?我该怎么做才能让它们发挥作用?

2 个答案:

答案 0 :(得分:2)

您必须确保__future__.py可用于导入。不过,我不知道如何为Silverlight做到这一点。

答案 1 :(得分:1)

除了Jeff建议的,您还可以在设置引擎时设置除法行为

var engineOptions = new Dictionary<string, object>();
engineOptions["DivisionOptions"] = PythonDivisionOptions.New;
var engine = Python.CreateEngine(engineOptions);
Console.WriteLine("{0}", engine.Execute("4 / 3"));

或编译脚本时:

var engine = Python.CreateEngine();
var compilerOptions = (PythonCompilerOptions)engine.GetCompilerOptions();
compilerOptions.Module |= ModuleOptions.TrueDivision;
var code = engine.CreateScriptSourceFromString("4 / 3").Compile(compilerOptions);
Console.WriteLine("{0}", code.Execute());