PythonEngineEvalExtension

From IronPython Cookbook

an extension method for streamlined manipulation of python from C# for common cases (IPy 1.x only):

object x = engine.Eval("[2*i for i in range({0})",5) // returns [0,2,4,6,8]
object y = engine.Eval("{0}[-1]",x) // returns 8
engine.Eval("{0}.foo(name={1})",pyobj,s) // equivalent to pyobj.foo(name=s)

see description in my blog for more details.

    public static class PythonEngineEvalExtension
    {
        public static object Eval(this PythonEngine engine, string expression_format, params object[] args)
        {
            object[] arg_names = new object[args.Length];
            Dictionary<string, object> locals = new Dictionary<string, object>();
            for (int i = 0; i < args.Length; ++i)
            {
                object arg = args[i];
                string arg_name = "_cs_arg_" + i; // names should be unique enough not to hide other python names
                locals[arg_name] = arg;
                arg_names[i] = arg_name;
            }

            string expression;
            if (args.Length > 0)
            {
                expression = string.Format(expression_format, arg_names);
            }
            else
            {
                expression = expression_format;
            }

            return engine.Evaluate(expression, engine.DefaultModule, locals);
        }
    }


Back to Contents.

TOOLBOX
LANGUAGES