Невозможно передать словарь C # методу ironPython в качестве параметра - PullRequest
3 голосов
/ 17 марта 2012

Мне нужно передать список параметров, сохраненный в словаре, в функцию, реализованную классом 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параметры, «я» и словарь.

Я попытался изменить словарь для других параметров, и он работает хорошо.Проблема возникает только тогда, когда вы получаете ** параметр.

Я очень ценю вашу помощь!

Esteban.

1 Ответ

1 голос
/ 17 марта 2012

Это должно сработать, чтобы просто удалить ** перед parameters в коде Python:

class Expression(object):
    def ReturnFirstParameter(self, parameters):
        return parameters['first']

** следует использовать, когда вы передаете именованные параметры функции, а ваш код C # будет передавать словарь.

Ваш код C # будет вызывать функцию следующим образом:

x.ReturnFirstParameter({'first': 1})

Чтобы он работал с **parameters, вызов должен быть

x.ReturnFirstParameter(first=1)

Может быть, есть способ сделать это с Ironpython, но я не знаю, как.

...