【发布时间】:2020-05-29 16:15:51
【问题描述】:
Python 中的一切都是有原因的。所有由 Python 提供支持的系统都依赖于类似 50 个内置函数,其中大多数都非常有用并且是独一无二的,例如 format()、len()、list() 或 range()。 我不明白为什么enumerate() 存在。
它已在PEP 279 (2002) 中引入并一直保留到现在。我真的不明白它为什么存在,因为它可以使用其他更重要的内置函数在 2-3 个字符中完成。来自Python Docs:
seasons = ['Spring', 'Summer', 'Fall', 'Winter']
for i in enumerate(seasons):
print(i)
使用更重要的内置函数的实现是这样的:
for i in zip(range(len(seasons)), seasons):
print(i)
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
这两个是一样的,我们都知道zip() 和range() 的重要性。那么,为什么要添加一个看起来除了这两个之外没有任何价值的内置函数呢?
在Python Docs中,这里相当于enumerate():
def enumerate(sequence, start=0):
n = start
for elem in sequence:
yield n, elem
n += 1
底线:我想知道enumerate() 是否有一些我没有看到的独特功能。
【问题讨论】:
-
我认为
enumerate和等效的zip(range(len...混乱之间的可读性差异是不言而喻的。 :) 当您在技术上可以使用for循环时,为什么还要进行列表推导?当您在技术上可以使用while时,为什么还要使用for?等等。这一切都是为了能够优雅地表达常见的用例,而不需要大量的样板。 -
另外,在您的替代方法中,您正在重复
seasons,这通常不是一件好事。所以enumerate还是更好。 -
为什么要使用整个
itertools模块,因为它只是您可以使用更原始的东西构建的食谱......? -
当您可以在 Malbolge 中编写所有代码时,为什么还有 Python 存在?
-
您的灵活性如何?枚举不灵活怎么办?
标签: python string list enumerate