以下是我使用Python 3.8.1的情况(在macOS Mojave,10.14.6,如以及其他一些平台上的Python 3.7(或更旧版本))。我是新来的计算,不知道如何要求改进语言,但我认为我发现内置的奇怪行为功能map
。
随着代码next(iter(()))
升至StopIteration
,我希望从以下代码获取StopIteration
:
tuple(map(next, [iter(())]))
令我惊讶的是,它默默地返回了元组()
!
因此,当StopIteration
来自next
击中的“空”迭代器由iter(())
返回。但是,我不认为例外是正确处理,因为在“空”之前未引发StopIteration
从列表中选择了迭代器(由next
击中)。
- 我是否正确理解了行为?
不完全是。 map
接受其第一个参数(一个函数),并将其应用到第二个参数可迭代的每个项目,直到它捕获StopIteration
异常。引发此内部异常是为了告诉函数它已到达对象的末尾。如果您手动升高StopIteration
,它将看到并停止,然后才有机会处理列表中的任何(不存在)对象。