2015-02-25 2 views
2

Я пишу модуль python из собственной библиотеки ac, мне нужно знать, как обрабатывать функцию PyObject_GetItem(), в частности аргумент key, документация не очень полезно, и я видел пример, в котором растворКак обрабатывать аргумент `key 'в функции PyObject_GetItem()

Py_hash_t hash; 

hash = PyObject_Hash(key); 

но проблема в том, что я хотел бы иметь возможность знать key является ли строка или целое число.

Я мог бы использовать metdod PyObject_Hash(), если есть способ отличить строковый ключ от целочисленного ключа, так как я могу также вычислить значение хэша, соответствующее строке, используя хеш-функцию Python, но я бы предпочел не делать этого потому что у меня уже есть бинарный поиск, реализованный в списке, который я пытаюсь получить через subscriptip в python.

Я также попытался

PyArg_ParseTuple(key, "i", ...); 

и для строки, чтобы проверить, какие один преуспевает, но тогда интерпретатор генерирует исключение, потому что key не кортеж.

+0

Зачем вам нужно знать тип? Что, если это не так? –

+0

@ IgnacioVazquez-Abrams, потому что я хочу предоставить два метода для извлечения элементов, по индексу и по имени элемента, есть имя, связанное с каждым, и очень важно использовать его для доступа к элементу. –

+0

Как бы вы это сделали в Python? Найдите подходящие эквиваленты C-api для инструментов Python, которые вы будете использовать. – user2357112

ответ

1

Я просто нашел способ сделать это правильно, есть PyUnicode_Check() макроса, который принимает один параметр PyObject и возвращает 0 если объект не unicode объекта, поэтому он возвращает 0 для ключа int и не- ноль для строкового ключа.

Это было именно то, что мне было нужно с этого момента, я могу приступить к извлечению текста и выполнению двоичного поиска в моем списке.

Также есть функция PyObject_TypeCheck(), которая возвращает тип объекта, очень полезный и в этом случае.

+0

Не могли бы вы показать, как u разобрал pyobject и получил –

 Смежные вопросы

  • Нет связанных вопросов^_^