python2 各数据类型的特点

Python 有多种内置数据类型。以下是比较重要的一些:
Booleans[布尔型] 或为 True[真] 或为 False[假]。
Numbers[数值型] 可以是 Integers[整数](1 和 2)、Floats[浮点数](1.1 和 1.2)、Fractions[分数](1/2 和 2/3)、甚至是 Complex Number[复数]。
Strings[字符串型] 是 Unicode 字符序列,例如: 一份 html 文档。
Bytes[字节] 和 Byte Arrays[字节数组], 例如: 一份 jpeg 图像文件。
Lists[列表] 是值的有序序列。
Tuples[元组] 是有序而不可变的值序列。
Sets[集合] 是装满无序值的包裹。
Dictionaries[字典] 是键值对的无序包裹。
当然,还有更多的类型。在 Python 中一切均为对象,因此存在像 module[模块]、 function[函数]、 class[类]、 method[方法]、 file[文件] 甚至 compiled code[已编译代码]

数值:

  • Python 同时支持 Integer[整型] 和 Floating Point[浮点型] 数值。无任何类型声明可用于区分;Python 通过是否有小数点来分辨它们

可使用 isinstance() 函数判断某个值或变量是否为给定某个类型,如:isinstance(1, int)。

  • 将一个 int 与一个 float 相加将得到一个 float 。Python 把 int 强制转换为 float 以进行加法运算;然后返回一个 float 类型的结果。

  • int() 将进行取整,而不是四舍五入。对于负数,int() 函数朝着 0 的方法进行取整。它是个真正的取整(截断)函数,而不是 floor[地板]函数。

  • 浮点数精确到小数点后 15 位。整数可以任意大。

  • / 运算符执行浮点除法。即便分子和分母都是 int,它也返回一个 float 浮点数。

  • // 运算符执行古怪的整数除法。如果结果为正数,可将其视为朝向小数位取整(不是四舍五入)

  • 当整数除以负数, // 运算符将结果朝着最近的整数“向上”四舍五入。如10 // (-4)的结果是-3。

  • // 运算符并非总是返回整数结果。如果分子或者分母是 float,它仍将朝着最近的整数进行四舍五入,但实际返回的值将会是 float 类型。

  • ** 运算符的意思是“计算幂”,11**2结果为 121 。

  • Python 并不支持无限精度。tan(π / 4) 将返回 1.0,而不是 0.99999999999999989。 

  • 在布尔类型上下文环境中,非零整数为真;零为假。

  • 非零浮点数为真; 0.0 为假。如果有轻微的四舍五入偏差,那么 Python 将测试 0.0000000000001 而不是 0 ,并将返回一个 True 值。

  • 分数也可在布尔类型上下文环境中使用。无论 n 为何值,Fraction(0, n) 为假。所有其它分数为真。

列表:

  • 列表可当做以零为基点的数组使用。非空列表的首个元素始终是 a_list[0] 。 

  • 使用负索引值可从列表的尾部向前计数访问元素。任何非空列表的最后一个元素总是 a_list[-1] 。

  • 如果负数令你混淆,可将其视为如下方式: a_list[-n] == a_list[len(a_list) - n] 。因此在此列表中, a_list[-3] == a_list[5 - 3] == a_list[2]。

  • 通过指定两个索引值,可以从列表中获取称作“切片”的某个部分。返回值是一个新列表,它包含列表中所有元素,按顺序从第一个切片索引开始,截止但不包含第二个切片索引。

  • 如果切片索引之一或两者均为负数,切片操作仍可进行。如果有帮助的话,您可以这么思考:自左向右读取列表,第一个切片索引指明了想要的第一个元素,第二个切片索引指明了第一个不想要的元素。返回值是两者之间的任何值。 between.

  • 列表是以零为起点的,因此 a_list[0:3] 返回列表的头三个元素,从 a_list[0] 开始,截止到但不包括 a_list[3] 。

  • 如果左切片索引为零,可以将其留空而将零隐去。因此 a_list[:3] 与 a_list[0:3] 是完全相同的,因为起点 0 被隐去了。

  • 同样,如果右切片索引为列表的长度,也可以将其留空。因此 a_list[3:] 与 a_list[3:5] 是完全相同的,因为该列表有五个元素。此处有个好玩的对称现象。在这个五元素列表中,a_list[:3] 返回头三个元素,而 a_list[3:] 返回最后两个元素。事实上,无论列表的长度是多少, a_list[:n] 将返回头 n 个元素,而 a_list[n:] 返回其余部分。
  • 如果两个切片索引都留空,那么将包括列表所有的元素。但该返回值与最初的 a_list 变量并不一样。它是一个新列表,只不过恰好拥有完全相同的元素而已。a_list[:] 是对列表进行复制的一条捷径。

  • + 运算符连接列表以创建一个新列表。列表可包含任何数量的元素;没有大小限制(除了可用内存的限制)。然而,如果内存是个问题,那就必须知道在进行连接操作时,将在内存中创建第二个列表。在该情况下,新列表将会立即被赋值给已有变量 a_list 。因此,实际上该行代码包含两个步骤 — 连接然后赋值 — 当处理大型列表时,该操作可能(暂时)消耗大量内存。 

  • 列表可包含任何数据类型的元素,单个列表中的元素无须全为同一类型。可包含一个字符串、一个浮点数和一个整数。

  • append() 方法向列表的尾部添加一个新的元素。 

  • 列表是以类的形式实现的。“创建”列表实际上是将一个类实例化。因此,列表有多种方法可以操作。extend() 方法只接受一个列表作为参数,并将该参数的每个元素都添加到原有的列表中。

  • insert() 方法将单个元素插入到列表中。第一个参数是列表中将被顶离原位的第一个元素的位置索引。列表中的元素并不一定要是唯一的;比如说:现有两个各自独立的元素,其值均为 ’Ω’:,第一个元素 a_list[0] 以及最后一个元素 a_list[6] 。 

  • extend() 方法只接受一个参数,而该参数总是一个列表,并将列表 a_list 中所有的元素都添加到该列表中。

  • 如果开始有个 3 元素列表,然后将它与另一个 3 元素列表进行 extend 操作,结果是将获得一个 6 元素列表。

  • count(x) 方法返回了列表中x出现的次数。

  • 如果你想知道的是某个值是否出现在列表中, in 运算符将会比使用 count() 方法要略快一些。in 运算符总是返回 True 或 False;它不会告诉你该值出现在什么位置。

  • 如果想知道某个值在列表中的精确位置,可调用 index() 方法。尽管可以通过第二个参数(以 0 为基点的)索引值来指定起点,通过第三个参数(以 0 基点的)索引来指定搜索终点,但缺省情况下它将搜索整个列表。

  • 如果在列表中没有找到该值,index() 方法将会引发一个例外。

  • 可使用 del 语句从列表中删除某个特定元素。

  • 删除索引 1 之后再访问索引 1 将 不会 导致错误。被删除元素之后的所有元素将移动它们的位置以“填补”被删除元素所产生的“缝隙”。

  • 还可以通过 remove() 方法从列表中删除某个元素。remove() 方法接受一个 value 参数,并删除列表中该值的第一次出现。同样,被删除元素之后的所有元素将会将索引位置下移,以“填补缝隙”。列表永远不会有“缝隙”。

  • 如果不带参数调用, pop() 列表方法将删除列表中最后的元素,并返回所删除的值。 

  • 可以从列表中 pop[弹出]任何元素。只需传给 pop() 方法一个位置索引值。它将删除该元素,将其后所有元素移位以“填补缝隙”,然后返回它删除的值。

 

元组:

  • 元组 是不可变的列表。一旦创建之后,用任何方法都不可以修改元素。

  • 元组的定义方式和列表相同,除了整个元素的集合都用圆括号,而不是方括号闭合。

  • 和列表一样,元组的元素都有确定的顺序。元组的索引也是以零为基点的,和列表一样,因此非空元组的第一个元素总是 a_tuple[0] 。

  • 负的索引从元组的尾部开始计数,这和列表也是一样的。 

  • 和列表一样,元组也可以进行切片操作。对列表切片可以得到新的列表;对元组切片可以得到新的元组。 

  • 元组和列表的主要区别是元组不能进行修改。用技术术语来说,元组是不可变更的。从实践的角度来说,没有可用于修改元组的方法。列表有像 append()、 extend()、insert()、remove() 和 pop() 这样的方法。这些方法,元组都没有。可以对元组进行切片操作(因为该方法创建一个新的元组),可以检查元组是否包含了特定的值(因为该操作不修改元组) 

  • 元组的速度比列表更快。如果定义了一系列常量值,而所需做的仅是对它进行遍历,那么请使用元组替代列表。

  • 对不需要改变的数据进行“写保护”将使得代码更加安全。使用元组替代列表就像是有一条隐含的 assert 语句显示该数据是常量,特别的想法(及特别的功能)必须重写。(??)

  • 一些元组可用作字典键(特别是包含字符串、数值和其它元组这样的不可变数据的元组)。列表永远不能当做字典键使用,因为列表是可变的。

  • 元组可转换成列表,反之亦然。内建的 tuple() 函数接受一个列表参数,并返回一个包含同样元素的元组,而 list() 函数接受一个元组参数并返回一个列表。从效果上看, tuple() 冻结列表,而 list() 融化元组。

集合:

  • 集合set是装有独特值的无序“袋子”。一个简单的集合可以包含任何数据类型的值。如果有两个集合,则可以执行像联合、交集以及集合求差等标准集合运算。

  • 简单的集合可以包括任何数据类型的值。而且,集合是 无序的。该集合并不记得用于创建它的列表中元素的最初顺序。如果向集合中添加元素,它也不会记得添加的顺序。

  • add() 方法接受单个可以是任何数据类型的参数,并将该值添加到集合之中。

  • 集合是装 唯一值 的袋子。如果试图添加一个集合中已有的值,将不会发生任何事情。将不会引发一个错误;只是一条空操作。

  • update() 方法仅接受一个集合作为参数,并将其所有成员添加到初始列表中。其行为方式就像是对参数集合中的每个成员调用 add() 方法。

  • 由于集合不能包含重复的值,因此重复的值将会被忽略。

  • 实际上,可以带任何数量的参数调用 update() 方法。如果调用时传递了两个集合, update() 将会被每个集合中的每个成员添加到初始的集合当中(丢弃重复值)。

  • update() 方法还可接受一些其它数据类型的对象作为参数,包括列表。如果调用时传入列表,update() 将会把列表中所有的元素添加到初始集合中。

  • discard() 接受一个单值作为参数,并从集合中删除该值。

  • 如果针对一个集合中不存在的值调用 discard() 方法,它不进行任何操作。不产生错误;只是一条空指令。

  • remove() 方法也接受一个单值作为参数,也从集合中将其删除。

  • 区别在这里:如果该值不在集合中,remove() 方法引发一个 KeyError 例外。

  • pop() 方法从集合中删除某个值,并返回该值。然而,由于集合是无序的,并没有“最后一个”值的概念,因此无法控制删除的是哪一个值。它基本上是随机的。

  • clear() 方法删除集合中 所有 的值,留下一个空集合。它等价于 a_set = set(),该语句创建一个新的空集合,并用之覆盖 a_set 变量的之前的值。

  • 试图从空集合中弹出某值将会引发 KeyError 例外。

  • 要检测某值是否是集合的成员,可使用 in 运算符。其工作原理和列表的一样。

  • union() 方法返回一个新集合,其中装着 在两个 集合中出现的元素。

  • intersection() 方法返回一个新集合,其中装着 同时 在两个集合中出现的所有元素。

  • difference() 方法返回的新集合中,装着所有在 a_set 出现但未在 b_set 中的元素。

  • symmetric_difference() 方法返回一个新集合,其中装着所有 只在其中一个 集合中出现的元素。

 

字典:

  • 字典是键值对的无序集合。向字典添加一个键的同时,必须为该键增添一个值。(之后可随时修改该值。) Python 的字典为通过键获取值进行了优化,而不是反过来。

  • 在字典中不允许有重复的键。对现有的键赋值将会覆盖旧值。

  • 可随时添加新的键值对。该语法与修改现有值相同。

  • 对既有字典键进行赋值只会用新值替代旧值。

  • 字典并非只能用于字符串。字典的值可以是任何数据类型,包括整数、布尔值、任何对象,甚至是其它的字典。而且就算在同一字典中,所有的值也无须是同一类型,您可根据需要混合匹配。字典的键要严格得多,可以是字符串、整数和其它一些类型。在同一字典中也可混合、匹配使用不同数据类型的键。

 

None:

  • None 是 Python 的一个特殊常量。它是一个  值。None 与 False 不同。None 不是 0 。None 不是空字符串。将 None 与任何非 None 的东西进行比较将总是返回 False 。

  • None 是唯一的空值。它有着自己的数据类型(NoneType)。可将 None 赋值给任何变量,但不能创建其它 NoneType 对象。所有值为 None 变量是相等的。

     

     

posted @ 2012-08-21 23:40  linzj  阅读(2184)  评论(0编辑  收藏  举报