Ошибка при использовании кода C в Python - PullRequest
2 голосов
/ 20 июля 2011

Я использую следующий код, который я нашел в Интернете

def c_int_binary_search(seq,t):
    # do a little type checking in Python
    assert(type(t) == type(1))
    assert(type(seq) == type([]))

    # now the C code
    code = """
       #line 29 "binary_search.py"
       int val, m, min = 0;
       int max = seq.length() - 1;
       PyObject *py_val;
       for(;;)
       {
           if (max < min  )
           {
               return_val =  Py::new_reference_to(Py::Int(-1));
               break;
           }
           m =  (min + max) /2;
           val = py_to_int(PyList_GetItem(seq.ptr(),m),"val");
           if (val  < t)
               min = m  + 1;
           else if (val >  t)
               max = m - 1;
           else
           {
               return_val = Py::new_reference_to(Py::Int(m));
               break;
           }
       }
       """
    return inline(code,['seq','t'])

из документации scipy

Когда я пытаюсь выполнить этот скрипт, у меня появляются следующие ошибки

  binary_search.py: In function ‘PyObject* compiled_func(PyObject*, PyObject*)’:
  binary_search.py:36:38: error: ‘Py’ has not been declared

Мне интересно, может ли кто-нибудь помочь мне в этом. Я уже установил PyCXX. Я использую Ubuntu.

Большое спасибо.

1 Ответ

5 голосов
/ 20 июля 2011

Этот пример устарел, пространство имен Py не существует в последних версиях.

В некоторых дистрибутивах примеры (которые должны обновляться) с scipy.На моей машине есть это:

/usr/lib64/python2.7/site-packages/scipy/weave/examples/binary_search.py

Если у вас нет чего-то подобного, вы можете загрузить его из SciPy репозитория .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...