2 . python Collections -- Namedtuple()

nametuple() 是具备命名字段的元组的工厂函数sql


命名元组为元组中每一个位置赋予含义,并容许更具可读性的自编写代码 ide

它们能够在任何使用常规元组的地方使用,而且他们添加了按名称而不是位置索引访问字段的功能。函数


用法:spa

collections.namedtuple(typenamefield_names*verbose=Falserename=Falsemodule=None)3d


    返回名为typename的新元组子类。 新的子类用于建立相似元组的对象,这些对象具备能够经过属性查找访问的字段以及可索引和可迭代的字段。 子类的实例也有一个有用的docstring(带有typename和field_names)和一个有用的__repr __()方法,它以name = value格式列出元组内容。
code


    field_names是单个字符串,每一个字段名由"空格"和"/"或"逗号"分隔,例如'x y'或'x,y'。或者,field_names 能够是一系列字符串,例如['x', 'y']。orm


    任何有效的Python标识符均可以用于字段名称,除了如下划线开头的名称外。 sqlite

    有效标识符由字母,数字和下划线组成,但不以数字或下划线开头,而且不能是关键字,例如:class,for,return,global,pass或raise。对象


    若是 rename 为true,则无效的字段名会自动替换为位置名称。 blog

    例如,将['abc','def','ghi','abc']转换为['abc','_1','ghi','_3'],从而消除关键字def和重复字段名abc。


    若是verbose为true,则在构建类定义以后打印它。 此选项已过期; 相反,打印_source属性更简单。

    若是定义了module,则将命名元组的__module__属性将设置为该值。


命名的元组实例没有每一个实例的字典,所以它们是轻量级的,而且不须要比常规元组占用更多的内存。

在版本3.1中更改:添加了对rename的支持。

在版本3.6中更改:verbose 和 rename 参数成为 keyword-only 参数。

在版本3.6中更改:添加了module参数。

image.png


命名元组对于将字段名称分配给由csv或sqlite3模块返回的结果元组特别有用:

image.png

        除了从元组继承的方法外,命名元组还支持三个额外的方法和两个属性。为防止与字段名称冲突,方法和属性名称如下划线开头。


(1)classmethod 

    somenamedtuple._make(iterable)

                从现有序列生成新实例或可迭代的类方法。

            image.png

            

    somenamedtuple._asdict()

                返回一个新的OrderedDict,它将字段名称映射到它们对应的值:

            image.png


            somenamedtuple._replace(**kwargs)

                返回指定元组的新实例,用新值替换指定字段:

             image.png


    somenamedtuple._source

                带有纯Python源代码的字符串,用于建立命名元组类。 源使得命名元组自我记录。 它能够打印,使用exec()执行,或保存到文件并导入。


                

    somenamedtuple._fields

                列出字段名称的字符串元组。 用于内省和从现有命名元组中建立新的命名元组类型。

            image.png

            

            要检索名称存储在字符串中的字段,请使用getattr( )函数:

            image.png

    

            要将字典转换为命名元组,请使用double-star-operator(双星运算符)(如解包参数列表中所述):

            image.png


              因为命名元组是常规的Python类,所以可使用子类轻松添加或更改功能。如下是如何添加计算字段固定宽度打印格式的方法:

              image.png


               

                上面显示的子类将__slots__设置为一个空元组。 这有助于防止建立实例字典,从而下降内存需求。

                子类化对于添加新的存储字段没有用处。 

                相反,只需从_fields属性建立一个新的命名元组类型:

                image.png

   

                能够经过直接分配__doc__字段来自定义文档字符串:

                image.png

                

                可使用_replace()来自定义原型实例来实现默认值:

                image.png

相关文章
相关标签/搜索