[IronPython] Calling a Python function with passed in args/kwargs from C#
Dino Viehland
dinov at microsoft.com
Sat Apr 24 01:27:15 CEST 2010
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.
More information about the Ironpython-users
mailing list