2009-06-02 49 views
1

我正在写一个python扩展以提供对Solaris kstat数据的访问(与运行perl库Sun :: Solaris :: Kstat相同的精神),并且我有一个关于有条件地返回列表的问题或一个单一的对象。蟒蛇用例看起来像:Python扩展返回对象礼仪

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

,因为它是目前实现的,查询()返回所有的kstat对象,其匹配的列表。第一种情况会导致一个对象列表(与CPU一样多),第二个调用完全指定一个单一的kstat,并返回一个包含一个kstat的列表。

我的问题是可怜的形式返回一个单一的对象时,只有一个匹配,并有一个列表时,有很多?

谢谢你的深思熟虑的答案!我的蟒蛇很弱,但由于像你这样的人而变得更强壮。

+0

即使你在编写扩展模块的上下文中提出这个问题,如果你正在编写纯Python函数,答案也是一样的。 – Miles 2009-06-02 17:28:01

回答

7

“我的问题是只有一个匹配时返回单个对象的可怜形式,以及有多少个时返回一个列表?”

返回不一致类型的方式很差。

返回一致的类型:kstat列表。

大多数Pythonistas不喜欢使用type(result)来确定它是否是kstat或kstats列表。

我们宁愿以简单一致的方式检查列表的长度。另外,如果长度取决于系统信息,API方法可能会提供此元数据。

请看DB-API PEP以获取关于如何处理查询式事物的建议和想法。

+1

那么我认为你的答案应该是“是”,而不是“否”,因为你认为它*是坏的形式。 – 2009-06-02 17:14:45