我有一个 Python 脚本,我在 C#代码( Ironpython )中使用它,它运行正常。另外,我想在 Python 脚本中为我的函数添加一个列表作为输入参数。
我从C#WinForm中获取了一些字符串,我将其格式化为Python代码:
string code = "list [a, b, c, d]";
我的额外C#代码:
ScriptSource source = m_engine.CreateScriptSourceFromString(code);
dynamic script = m_engine.ExecuteFile(@"path to my file");
dynamic function = script.UpdateElements(source);
但后来我得到以下异常:
迭代ScriptSource类型的非序列
在我的Python文件中,我有一个这样的函数(其中source是一个列表):
def UpdateElements(source):
#do some stuff
所以我的问题是:如何在Python脚本中将C#中的字符串列表作为输入传递给我的函数?
答案 0 :(得分:3)
将字符串列表设为
var code = "['a', 'b', 'c', 'd']";
您可以执行此列表文字源来检索IronPython列表:
dynamic result = source.Execute();
此列表可用于调用函数:
dynamic function = script.UpdateElements(result);
作为替代方案(如果文字字符串列表只是一种解决方法,并且您具有其他形式的实际值),您还可以为IronPython函数提供.NET集合,并且适用于许多场景:
var data = new[] { "a", "b", "c", "d" };
var engine = Python.CreateEngine();
dynamic script = engine.ExecuteFile(@"script.py");
dynamic function = script.UpdateElements(data);