3

我正在尝试使用 Iron-Python 二进制文件中的 Python 引擎评估一些与流体力学相关的表达式。我已经达到以下代码:

ScriptEngine engine = Python.CreateEngine();
ScriptSource source = engine.CreateScriptSourceFromString("import math", SourceCodeKind.AutoDetect);
source.Execute();
source = engine.CreateScriptSourceFromString("2*sin (2)", SourceCodeKind.AutoDetect);
button1.Text = source.Execute<float>().ToString();

每当我尝试运行时,都会出现以下错误:Global name 'sin' not defined. 我也尝试过Math.sin(),但没有成功。有任何想法吗?

4

1 回答 1

3

如果您想让所有数学函数在全局范围内可访问,您可以使用from math import *代替(这可能对您有用,因为您的表达式本质上是数学的)。import math

您还应该创建一个ScriptScope来存储全局状态,这样您就可以执行多个语句:

ScriptScope scope = engine.CreateScope();

ScriptSource source = engine.CreateScriptSourceFromString("from math import *", SourceCodeKind.AutoDetect);
source.Execute(scope);

source = engine.CreateScriptSourceFromString("2*sin (2)", SourceCodeKind.AutoDetect);
button1.Text = source.Execute<float>(scope).ToString();

您甚至可以从 C# 将对象放入范围:

scope.SetVariable("x", 0.577);
于 2012-10-15T17:20:35.817 回答