我需要将存储在字典中的参数列表传递给函数 由ironPython类实现。
我准备了重现错误的最小示例:
// C# Side
var runtime = Python.CreateRuntime();
dynamic test = runtime.UseFile("test.py");
// Here the parameters dictionary is instantiated and filled
var parametersDictionary = new Dictionary<string, int>();
parametersDictionary.Add("first", 1);
// The Python 'x' instance is called passing parameter dictionary
var result = test.x.ReturnFirstParameter(parametersDictionary);
现在是Python代码:
# Python side
# Class 'Expression' definition
class Expression(object):
def ReturnFirstParameter(self, **parameters):
return parameters['first']
# Class 'Expression' instantiation
x = Expression()
当我运行程序时,我得到以下异常:
ReturnFirstParameter() takes exactly 1 argument (2 given)
第一个参数是'self',但似乎无视它接收 2个参数,'self'和字典。
我尝试更改其他参数的字典,效果很好。问题 只有在收到**参数时才会出现。
我非常感谢你的帮助!
埃斯特。
答案 0 :(得分:1)
只需从Python代码中的**
前面删除parameters
即可:
class Expression(object):
def ReturnFirstParameter(self, parameters):
return parameters['first']
将命名参数传递给函数时,应使用 **
,并且C#代码将传递字典。
您的C#代码将调用此函数:
x.ReturnFirstParameter({'first': 1})
要使其与**parameters
一起使用,则需要
x.ReturnFirstParameter(first=1)
使用ironpython可能有办法做到这一点,但我不确定如何。