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
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com