Расширение Python Возвращенный объект этикет - PullRequest
1 голос
/ 02 июня 2009

Я пишу расширение Python для обеспечения доступа к данным Solaris kstat (в том же духе, что и библиотека Perl Sun :: Solaris :: Kstat), и у меня есть вопрос об условном возврате списка или одного объекта. Вариант использования Python будет выглядеть примерно так:

    cpu_stats = cKstats.lookup(module='cpu_stat')
    cpu_stat0 = cKstats.lookup('cpu_stat',0,'cpu_stat0')

Поскольку это в настоящее время реализовано, lookup () возвращает список всех соответствующих объектов kstat. В первом случае будет получен список объектов (столько же, сколько процессоров), а во втором вызове будет полностью указан один kstat, и будет возвращен список, содержащий один kstat.

Мой вопрос - это плохая форма для возврата одного объекта, когда есть только одно совпадение, и списка, когда их много?

Спасибо за вдумчивый ответ! Мой питон-фу слаб, но становится сильнее благодаря таким людям, как ты.

1 Ответ

7 голосов
/ 02 июня 2009

"Мой вопрос - это плохая форма для возврата одного объекта, когда есть только одно совпадение, и списка, когда их много?"

Это плохая форма для возврата несовместимых типов.

Возвращает согласованный тип: список kstat.

Большинство Pythonistas не любят использовать type(result) для определения, является ли это kstat или списком kstats.

Мы бы предпочли проверить длину списка простым и последовательным способом.

Кроме того, если длина зависит от части системной информации, возможно, метод API мог бы предоставить эти метаданные.

Посмотрите на DB-API PEP , чтобы получить советы и идеи о том, как обрабатывать объекты, подобные запросам.

...