#5月学习挑战#Python入门-基础语法-enumerate用法

enumerate是python内置类builtins.enumerate2.x3.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临时运行环境(文件操作)),还是懵。

你可能感兴趣的:(python,python,enumerate)