PEP 212 – 循环计数器迭代

猫勺猫勺 05-02 4.42 W 阅读

拒收通知

PEP 已被拒绝。,在 PEP 279 中介绍, 涵盖了本 PEP 中提出的用例,并且 PEP 作者已经 遥 不可 及。enumerate()

介绍

此 PEP 描述了经常提出的公开循环的功能 for 循环中的计数器。此 PEP 跟踪 此功能。它包含对功能的描述和 概述了支持该功能所需的更改。这个PEP 总结在邮件列表论坛中进行的讨论,并提供 URL 以获取更多信息(如适用)。CVS 修订版 此文件的历史记录包含权威的历史记录。

赋予动机

Python 中的标准 for 循环遍历 序列 [1]。通常,需要遍历索引或 元素和索引都代替。

用于实现此目的的常见习语是不直观的。这 PEP提出了两种不同的指数暴露方式。

循环计数器迭代

当前循环索引的习语利用了 内置功能:range

for i in range(len(sequence)):
    # work with index i

元素和索引的循环可以通过以下方式实现 旧成语或使用新的内置函数 [2]:zip

for i in range(len(sequence)):
    e = sequence[i]
    # work with index i and element e

或:

for i, e in zip(range(len(sequence)), sequence):
   # work with index i and element e

建议的解决方案

已经讨论了三种解决方案。一个添加一个 nonreserved 关键字,另一个增加了两个内置功能。 第三种解决方案将方法添加到序列对象中。

非保留关键字

该解决方案将扩展 for 循环的语法,方法是将 也可以使用的可选条款 而不是子句。<variable> indexing<variable> in

因此,循环序列的索引将变为:

for i indexing sequence:
    # work with index i

类似地,在索引和元素上循环如下:

for i indexing e in sequence:
    # work with index i and element e

内置功能和

此解决方案添加了两个内置函数和 . 这些的语义可以描述如下:indicesirange

def indices(sequence):
    return range(len(sequence))
  
def irange(sequence):
    return zip(range(len(sequence)), sequence)

这些功能可以急切地或懒惰地实现,并且 应该易于扩展,以便接受多个序列 论点。

使用这些函数将简化循环的习语 在索引以及元素和索引上:

for i in indices(sequence):
    # work with index i
    
for i, e in irange(sequence):
    # work with index i and element e

序列对象的方法

此解决方案建议将 和 方法添加到序列中,从而实现循环 仅索引,包括索引和元素,以及仅元素 分别。indicesitemsvalues

这将极大地简化循环索引的习语 以及循环访问元素和索引:

for i in sequence.indices():
    # work with index i
    
for i, e in sequence.items():
    # work with index i and element e

此外,它还允许对元素进行循环 以一致的方式排列序列和字典:

for e in sequence_or_dict.values():
    # do something with element e

实现

对于这三种解决方案,都存在一些或多或少的粗糙补丁 作为 SourceForge 的补丁:

  • for i indexing a in l:公开 for 循环计数器 [3]

  • 将 和 添加到内置项 [4]indices()irange()

  • 将方法添加到 ListObject [5]items()

所有这些都被BDFL宣布并拒绝。

请注意,关键字只是 语法等并不妨碍 .indexingNAMEindexing


向后兼容性问题

由于没有添加关键字和现有代码的语义 保持不变,三种解决方案都可以实施 在不破坏现有代码的情况下。



The End 微信扫一扫

文章声明:以上内容(如有图片或视频在内)除非注明,否则均为腾龙猫勺儿原创文章,转载或复制请以超链接形式并注明出处。

本文作者:猫勺本文链接:https://www.jo6.cn/post/95.html

上一篇 下一篇

相关阅读

取消
微信二维码
微信二维码
支付宝二维码