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

Reply via email to