Python 是否有一个内置的等效于C#和#x27;s可枚举。Single()?
在C#中,如果您有一个可枚举项并尝试调用它,那么如果其中没有一个元素,它将抛出一个错误 是否有类似于Python的内置功能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
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]
相同)。希望这能让事情变得更清楚。