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"]

原文地址:https://www.cnblogs.com/dLarger/p/12552128.html