enumerate
是python内置类builtins.enumerate
,2.x
与3.x
都支持。其作用如注释,对一个可迭代的对象,枚举化,返回一个枚举对象。该枚举对象可返回其中每个迭代元素的游标及元素本身(英语欠佳,非直译,请谅解)
"""
Return an enumerate object.
iterable
an object supporting iteration
The enumerate object yields pairs containing a count (from start, which
defaults to zero) and a value yielded by the iterable argument.
enumerate is useful for obtaining an indexed list:
(0, seq[0]), (1, seq[1]), (2, seq[2]), ...
"""
对一个可迭代对象进行枚举化,可以返回两个值,即从零开始的游标和迭代元素本身。
list = [
{
"id": 966024429,
"title": "Question about license.",
},
{
"id": 962477084,
"title": "visibility of wiki pages",
}
]
for i, item in enumerate(list):
print('')
print("## 第{}条信息".format(i))
print("* id: {}".format(item['id']))
print("* title: {}".format(item['title']))
打开enumerate(object)
的实现方法,发现他有个默认参数start
,这个参数用于数字游标启示值得,比如我们如果设置一个5,则在上述for
循环第一个返回的值为5。
def __init__(self, iterable, start=0): # known special case of enumerate.__init__
""" Initialize self. See help(type(self)) for accurate signature. """
pass
如enumerate
注释所说枚举对list
标记索引来说十分有用,我看到Python中enumerate用法详解中讲到一个enumerate
有趣的场景。
当想获得一个大文件的行数时,我们可以通过len(open(filepath, 'r').readlines())
来直接统计总长度。但是readlines()
会
将文件读入缓存,如果文件过大则会导致超时或者直接失败。
这时可以采用enumerate
来将open(filepath,'r')
枚举化,这样就不用了读取全部的文件信息,只需要遍历这个枚举对象即可。
其实这里有个问题,就是open()
方法返回的是个流对象,这个为什么不就不吃内存,看了一个讲返回值的文章(pythonopen函数返回值_Python笔记:open函数和with临时运行环境(文件操作)),还是懵。