zoukankan      html  css  js  c++  java
  • Python-Collections模块之NameTuple

    namedtuple : 可以创建包含名称的tuple

    一、除了从tuple继承的方法以外,nametuple还支持三种方法和一个属性,为了避免和名称冲突,这些方法和属性以下划线开始

    #1、nametuple._make(): 从已有的序列或者可迭代对象中创建一个新的对象
    from collections import namedtuple
    
    p = namedtuple('Point',['x','y'])
    t = [11,22]
    p1 = p._make(t)
    print(p1)
    #执行结果: Point(x=11, y=22)
    
    #2、nametuple._asdict(): 返回一个dict,由名称到对应值建立的映射
    p = namedtuple('Point',['x','y'])
    t = [33,44]
    p1 = p._make(t)
    print(p1)   #Point(x=33, y=44)
    print(p1._asdict())      #{'x': 33, 'y': 44}
    print(type(p1._asdict()))   #<class 'dict'>
    
    #3、nametuple._replace(): 返回一个新的nametuple对象,用新值替换指定名称中的值
    p = namedtuple('Point',['x','y'])
    t = [55,66]
    p1 = p._make(t)
    print(p1)        #Point(x=55, y=66)
    p2 = p1._replace(x=77)
    print(p2)        #Point(x=77, y=66)
    
    #4、nametuple._fields: 以字符串构成元组的形式返回nametuple中的名称,在已存在的nametuple上创建或修改新的nametuple时非常有用
    point = namedtuple('Point',['x','y'])
    t = [77,88]
    p1 = point._make(t)
    print(p1)          #Point(x=77, y=88)
    color = namedtuple('Color','red green blue')
    mix = namedtuple('Mix',point._fields + color._fields)
    print(mix(77,88,121,212,0))
    #执行结果: Mix(x=77, y=88, red=121, green=212, blue=0)
    
    #通过nametuple._fields创建一个新的nametuple
    p = namedtuple('Point',['x','y'])
    p1 = namedtuple('Point',p._fields + ('z',))
    print(p1._fields)
    #执行结果:('x', 'y', 'z')
    
    
    #枚举类型常量可以通过nametuple来实现
    Status = namedtuple('Status','open pending close')
    print(Status._make(range(3)))
    #执行结果: Status(open=0, pending=1, close=2)
    print(Status._fields[0])
    #执行结果: open
    
    #另一种实现方式:
    """
    class Status0:
         open, pending, close= range(3)
    print(Status0.open)
    print(Status0.pending)
    print(Status0.close)
    """
    
    
    #nametuple在给csv或者sqlites3返回的元组附上名称特别有用
    
    
    import csv
    EmployeeRecord = namedtuple('EmployRecord','name,age,title,department,paygrade')
    
    for emp in map(EmployeeRecord._make,csv.reader(open("employee.csv",'rb'))):
        print(emp.name,emp.title)
    三十六般武艺,七十二般变化,修练出个人品牌并发出光芒
  • 相关阅读:
    基于redis集群实现的分布式锁,可用于秒杀商品的库存数量管理,有測试代码(何志雄)
    VC断点失败的原因之中的一个
    由易到难学习递归的精华
    【特征检測】BRIEF特征点描写叙述算法
    POJ 2386 Lake Counting
    Design Pattern 设计模式1
    使用 InstallShield 制作 Delphi 软件安装包
    在64位系统上部署BDE的要点
    SQL SERVER 存储过程中SELECT 返回值如何赋值给变量
    sql语句中的insert 和 insert into 的区别?into有什么用?
  • 原文地址:https://www.cnblogs.com/deeptester-vv/p/14951431.html
Copyright © 2011-2022 走看看