【发布时间】:2010-10-03 02:55:40
【问题描述】:
我创建了一个实用函数来从生成器表达式返回预期的单个项目
print one(name for name in ('bob','fred') if name=='bob')
这是一个好方法吗?
def one(g):
try:
val = g.next()
try:
g.next()
except StopIteration:
return val
else:
raise Exception('Too many values')
except StopIteration:
raise Exception('No values')
【问题讨论】:
-
你为什么要关心是否不止一件?
-
我正在处理来自关系数据库的数据。我想在处理的同时检查它的完整性,完整性规则可以是“父母必须只有一个特定类型的孩子”或“父母必须有一个且只有一个特定类型的孩子”
-
这听起来真是个坏主意(tm)
-
我是认真的!任何产生 g 的东西都应该检查一致性,而不是用掉 g 的东西。如果我向 one() 要一件 g 并且它会返回“对不起,我可以给你一个,但我不会因为我有太多!”我会诅咒[你,可能]。
-
接受这在我使用它的条件下是完全有效的,以后请坚持回答具体问题,不要试图让人们失望。