Jeff wrote: > I'm trying to call a Python function from C# using args/kwargs from > the C# function, like so: > > public void Frob(CodeContext context, [ParamDictionary]IDictionary > kwargs, params object[] args) > { > context.LanguageContext.Operations.Invoke(foo, args, kwargs); > } > > foo is a Python callable object - in this case it's just: > > def foo(*args, **kwargs): > print args > print kwargs > > so that I can what is actually passed to it. > > I'd like to call foo with the equivalent of Python's foo(*args, > **kwargs). Passing it the way I did above just passes the arguments > into args without expanding them. Is there any way to trigger the > argument expansion from C#?
I think you want PythonCalls.CallWithKeywordArgs. You'll need an IDictionary<object, object> instead of a plain old IDictionary though (or you'll need to unpack the args for the other overload). Either way we end up calling this with a binder which should splat both arguments. If perf is important for this call we could talk about opening up PythonContext.Invoke(CallSignature) so you could create a call site which uses whatever signature you want. _______________________________________________ Users mailing list Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com