小编典典

从集合中选择一个项目:Python

python

我创建了一个实用程序函数来从生成器表达式返回期望的单个项目

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')

阅读 130

收藏
2021-01-20

共1个答案

小编典典

一个更简单的解决方案是使用元组拆包。这已经可以完成您想要的所有事情,包括检查它是否仅包含一项。

单项:

 >>> name, = (name for name in ('bob','fred') if name=='bob')
 >>> name
 'bob'

过多的物品:

>>> name, = (name for name in ('bob','bob') if name=='bob')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack

没有相关产品:

>>> name, = (name for name in ('fred','joe') if name=='bob')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 0 values to unpack
2021-01-20