Python: list, dict, tuple, file

      chromium更新了Version 35.0.1916.114 (270117)。字体变好看了,爽!好像还出来aura什么的。

      list, dict, tuple基本上算Python中最常用的高级数据类型。很多其他数据结构都可以由这些数据类型衍生。比如namedtuple。

list:

      list相当于数组,但是不同于数组的是list可以存任何数据类型,可以嵌套。因为list存的都是引用(指针)。比一般的数组灵活很多。比如添加元素,删除等。list是可变的,即一般的操作不会改变list的内存地址。像 l.sort() 都是直接在原list上操作的 不会返回新list。如果要返回新list的话使用sorted会更好。list等其他类型都要注意循环引用的问题。如下代码,在很久以前的Python会有问题。现在的Python也很好玩。

dict:

      dict是Python里非常神奇的数据类型。上能建树下能索引。dict使用hash来实现基本功能,因此dict的key的顺序是随机的,甚至同一个程序不同时间也会不一样,具体可以参考。dict用起来也是非常方便的,dict的key是不能用可变类型的,因为key要先hash,可变类型hash是没有意义的。关键是dict的Python3跟Python2稍微有点区别。最主要的区别是获取keys。 D.keys() 返回的是类似set的类型。如下程序测试。

tuple:

      tuple应该来说是最简单的。tuple是不可变类型。但tuple里面引用的内容可以变,不变的是可变数据类型的引用。如下。

      有了list为什么还有有tuple呢。最直接的原因是tuple的不可变。可以限制其他地方不小心的更改。更好的一点是因为不可变,tuple可以作为dict的key。

namedtuple是既可以像list一样顺序存取也可以像dict一样按key来。很有意思。

file:

      file姑且也算数据类型了。是由open()函数来创建。但也有其他类型的file,比如socket等。file在Python中默认以uft8格式解码,而不是Unicode。这两个之间还是有一点差别的。当然Python也可以指定不解码,以二进制方式读取, f = open('boot.img','rb') 。这种用法通常是读取编译文件等等。

      有时要把对象写入file。这是就需要序列化。python有内置的pickle等,有个struct也很好用。具体含义help就知。

      file据说不用手动关闭,因为Python的gc会自动收集没有引用的文件。但作为良好编程习惯还算close好。但也可以使用Python的File Context Manager.
      Python可以直接把shell的命令执行结果当成文件。

Unicode与utf8:

      Python默认是使用utf8的而不是Unicode。还有个NCR是用在网页里的,跟Unicode差不多,就是表示方法不一样。可以试一下Python中的对字符的处理以及utf8和Unicode间的转换。

链接:

  1. Python Built-in Types