Python 是否有一个内置的等效于C#和#x27;s可枚举。Single()?

Python 是否有一个内置的等效于C#和#x27;s可枚举。Single()?,python,Python,在C#中,如果您有一个可枚举项并尝试调用它,那么如果其中没有一个元素,它将抛出一个错误 是否有类似于Python的内置功能 if len(iterable) == 0 or len(iterable) > 1: raise Error("...") return iterable[0] 我认为没有,但您可以将其简化为: def single(iterable): if len(iterable) != 1: raise Error("...") r

在C#中,如果您有一个可枚举项并尝试调用它,那么如果其中没有一个元素,它将抛出一个错误

是否有类似于Python的内置功能

if len(iterable) == 0 or len(iterable) > 1:
    raise Error("...")
return iterable[0]

我认为没有,但您可以将其简化为:

def single(iterable):
    if len(iterable) != 1:
        raise Error("...")
    return iterable[0]

不是一种内置方法,但有一种惯用方法可以实现相同的目标:

(value,)=iterable
如果
iterable
不包含一个元素,则引发
ValueError

单个元素将存储在
value
中,因此您的示例可以简化为:

(value,) = iterable
return value
拆包是本产品的一个特点

如果目标列表是以逗号分隔的目标列表:对象必须是一个iterable,其项数必须与目标列表中的目标数相同,并且这些项从左到右分配给相应的目标


您能解释一下为什么需要它来引发异常吗?也许你想使用一个like断言(len(iterable)==1)?这个用例是什么?我很难想出一个好的方法。你能再解释一下和/或链接到文档,看看解包过程中发生了什么吗?当然!更新了答案。当赋值运算符(=)的目标是逗号分隔的列表时,iterable中的每个元素都将被赋值给目标列表中的每个项。如果目标中的项数与iterable中的项数不匹配,将引发ValueError。谢谢!我仍然对
(值,)
中的
有点困惑。玩游戏时,
(value)
将导致
value==iterable
的作用是什么?哦,括号是不需要的,有些人(包括我)使用括号是为了便于阅读,因为很容易漏掉一个逗号。试试
a,b=[1,2]
(这与
a,b,=[1,2]
相同)。希望这能让事情变得更清楚。