• Python之Collection模块-tuple及namedtuple


    Collection学习之tuple及namedetuple,总结输出:

    一、tuple

    1.1特点

    • 是元组,元素个数具有不可变性,不能对其中元素值进行修改,但如果元素是可变的list除外,但通常不建议这么使用;
    • 可迭代iterable,即可以一一遍历其中的元素;
    • 可拆包,即可位置提取其中的元素使用;
    • 例: user_tuple=("zhangsan",30,180)
    • •#拆包用法1
    • name,age,height=user_tuple
    • print(name,age,height)
    • 结果:zhangsan,30,180
    • •#拆包用法2
    • name,*other=user_tuple
    • print(name,*other)
    • 结果:zhangsan,[30,180]

    1.2比list的优势

    • 是不可变对象即immutable,可得来:性能优化-编译时tuple值确定下来,可提升速度。
    •                                                             线程安全-不被修改,所以是安全的
    •                                                             可作为dict的key
    • 例:user_info_dict={}
    • user_info_dict[user_tuple]="lisi"
    • print(user_info_dict)
    • 结果:lisi,30,180
    •                                                               可拆包

    理解类比:tuple类比C语言中的struct,list类比C语言中的array。

    1.3扩充知识:可哈希,魔法函数,python变量实质

    1. 可哈希
    • hash,又称“散列”,直译为“哈希”,是把任意长度的输入,通过散列算法,变成固定长度的输出,该输出为散列值。这种转换是一种压缩映射,即,散列值得空间通常远小于输入的空间,不同的输入可能散列成相同的输出,所以,不能从散列值来唯一确定输入值。
    • hash主要用于信息安全领域中的加密算法,把一些不同长度的信息转化成杂乱的128位的编码里,叫hash值,也即hash就是找到一种数据内容和数据存放地址之间的映射关系。著名的hash 算法有MD5,SHA1目前应用最广泛,都是以MD4为基础设计的。
    • 可哈希,一个对象在其生命周期内,如果保持不变,就是hashable。python中,list,set,dict都是可变的,如:list.append(),set.remove(),dict['key']=value,所以,都不可哈希。而tuple,string,objects不可变,只能复制或切片,所以是可哈希的。

           2. python变量实质:

    • 通俗理解,可理解为便利贴(指针),数据存储在那里,发生赋值语句,就是把便利贴往数据存储地方贴,如:b=[3,4,5],计算机为[3,4,5]这个数据开辟存储地址,然后赋值给变量b,把b这张便利贴往存储地址贴,a=b,就是把a这张便利贴往b所在地方贴,所以a和b贴的都是同一地方,即a和b指向同一内存地址(同一个数据)

            3. 魔法函数

    • 魔法函数即是pyton内置的以双下划线开头并以双下划线结尾的函数(不能自己定义),如:__init__(),__str__(),__getitem__()等,用于实现并定制很多特性,非常灵活,且是隐式调用。      
    • 魔法函数的使用目的:相当于JAVA或C++中的函数重载,即对类中的内置方法进行重载,按自己要求实现。

    二、namedtuple

     是tuple的增强,可用来定义tuple类对象,其中含有很多方法,其中最常用和重要的是_make和_asdict方法。

    namedtuple好处:可以节省空间,使用tuple的用法,可以对类对象进行拆包,在数据处理过程中,namedtuple会使用的特别多。

    使用举例:

    用法1:

    类名=namedtuple(类名,属性) #用法说明

    1.User=namedtuple(“User”,["name",“age”,“height”,“edu”])

    2.user=User(name=“zhangsan”,age=30,height=180,edu=“bachelor”)

    print(user.name,user.height,user.age)

    另外,初始化,可以用tuple进行初始化:

    3.user_tuple=("zhangsan",30,180)

    4.user=User(*user_tuple,“bacherlor”)//*user_tuple即*args,**kwargs函数参数形式,其中*args为tuple格式,**kwargs为dict格式。

    print(user.name,user.height,user.age)

    用法2:#使用_make方法

    即在初始化时,使用_make方法:

    5.user_tuple=("zhangsan",30,180,"bachelor")

    6.user=User._make(user_tuple)#注意:make的参数必须是iterable对象,即除了tuple,也可以是list和dict;但使用_make方法参数个数一定要一致!!!

    print(user.age,user.name,user.edu)

    用法3:#使用_asdict方法

    方法作用:可以将tuple对象转换成dict,其中dict的参数顺序是按参数名的字母从小到大排序。

    在第6句基础上,

    user_info_dict=user._asdict()

    用法4:进行拆包

    在第6句基础上,

    name,age,*other=user

    print(name,age,*other)#结果:zhangsan,30,[180,"bachelor"]

  • 相关阅读:
    金蝶k3 显示BOS序时簿并返回选中的值
    金蝶K3bos插件操作另一张单据
    H2.64的远程回放--开篇
    监控外网访问的几种方式
    ilbc编解码
    windows系统上安装与使用Android NDK r5 (转)
    安卓与PC网络对接实现视频实时播放
    WDR7500 花生壳问题
    要确保任何一次员工的晋升都符合公司的利益
    关于“部门建设”
  • 原文地址:https://www.cnblogs.com/dLarger/p/12552128.html
Copyright © 2020-2023  润新知