1

C#コード ( Ironpython ) で使用するPythonスクリプトがあり、正常に動作します。さらに、 Pythonスクリプトの関数の入力パラメーターとしてリストを追加したいと思います。

Python コードのようにフォーマットした C# WinForm からいくつかの文字列を取得します。

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ファイルには、次のような関数があります(ソースはリストです):

def UpdateElements(source):
   #do some stuff

私の質問: C# から Python スクリプトの関数への入力として文字列のリストを渡すにはどうすればよいですか?

4

1 に答える 1

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);
于 2013-11-07T11:07:59.883 に答える