2009-06-02 3 views
1

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

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

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

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

Благодарим за продуманный ответ! Мой python-fu слаб, но усиливается благодаря таким людям, как вы.

+0

Даже если вы задаете этот вопрос в контексте написания модуля расширения, ответ будет таким же, если вы пишете чистые функции Python. – Miles

ответ

7

«Мой вопрос - плохая форма, чтобы вернуть один объект, когда есть только одно совпадение, и список, когда их много?»

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

Возврат согласованного типа: Список kstat.

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

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

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

Посмотрите на DB-API PEP за советом и идеями о том, как обращаться с запросами.

+1

Я верю, что в вашем ответе следует сказать «Да», а не «Нет», поскольку вы утверждаете, что это * плохая форма. –

+0

+1 Совершенно верно. И особенно для ссылки DB-API. –