Python程序可以分解为模块、语句、表达式以及对象,如下所示:
程序由模块构成
模块包含语句
语句包含表达式
表达式建立并出口对象
一、Python类型的介绍:
1.1 为什么使用内置类型
Python提供了强大的对象类型作为语言的组成部分,事实上,除非有内置类型无法提供的特殊对象要处理,最好总是使用内置对象而不是使用自己的实现。下面是其原因:
内置对象使程序更容易编写:
对于简单的任务,内置类型往往能够表现问题领域的所有结构。例如,集合(列表)和搜索表(字典)可以马上使用它们,仅使用python内置对象类型就能完成很多工作。
内置对象使扩展的组建:
对于较为复杂的任务,或许仍需要提供自己的对象,使用python的类或C语言的结构。例如,堆栈数据结构也许会实现为管理和定制内置列表的类。
内置对象往往比定制的数据结构更有效率:
在速度方面,python内置类型优化了用C实现数据结构算法。尽管可以实现属于自己的类似的数据类型,但往往很难达到内置数据类型所提供的性能水平。
内置对象是语言的标准的一部分:
python不但借鉴了依靠内置工具的语言(例如LISP),而且吸取了那些依靠程序员去提供自己实现的工具或框架的语言(例如C++)的优点。尽管在Python中可以实现独一无二的对象类型,但在开始阶段并没有必要这样做。此外,因为Python的内置工具是标准的,他们一般都是一致的。
1.2 Python的核心数据类型
python的内置对象类型和一些编写其常量(literal)所使用到的语法,也就是能够生成这些对象的表达式。
内置对象:
数字、字符串、列表、字典、元组、文件、集合、其他类型、编程单元类型、与实现相关的类型
上面所列内容并不完整,因为在python程序中处理的每样东西都是一种对象。例如,在python中进行文本模式匹配时,创建了模式对象,还有进行网络脚本编程时,使用了套接字对象,它们由def、class、import和lamba这样的语句和表达式创建,并且可以在脚本间自由地传递,存储在其他对象中等。
1.3数字
python的核心对象集合包括常规的类型:整数、浮点数以及更为少见的类型(有虚部的复数、固定精度的十进制数、带分子和分母的有理分数以及集合等)。
python的基本数字类型还是相当基本的。python中数字支持一般的数学运算。其中**表示乘方。
>>> 12+33 45 >>> 1.5*4 6.0 >>> 2 ** 100 1267650600228229401496703205376
#注意这里的最后一个记过:当需要的时候,python 3.0的整数类型会自动提供额外的精度,以用于较大的数值。
1.4 字符串
就像任意字符的集合一样,字符串是用来记录文本信息的。从严格意义上来说,字符串是单个字符的字符串的序列,其他类型的序列还包括列表和元组。
作为序列,字符串支持假设其中各个元素包含位置顺序的操作。例如,如果我们有四个字符的字符串,我们通过内置的len函数验证其长度并索引操作得到其各个元素。
>>> S = ‘Spam‘ >>> len(S) 4 >>> S[0] ‘S‘ >>> S[1] ‘p‘
在Python中,索引是按照最前面的偏移量进行编码的,也就是从0开始,第一项索引为0,第二项索引为1,以此类推。
>>> S[-1] ‘m‘ >>> S[-2] ‘a‘ >>>
#在Python中,我们能够反向索引,从最后一个开始(反向索引是从左边开始计算,反向索引是从右边开始计算)
>>> S[len(S)-1] ‘m‘
#一般来说,负的索引号会简单地与字符串的长度相加,因此,上面操作和S[-1]是等效的。
>>> S[1:3] ‘pa‘
#除了简单的从位置进行索引,序列也支持一种所谓分片(slice)的操作,这是一种一步就能够提取整个分片(splice)的方法。
>>> S[1:] ‘pam‘ >>> S[0:3] ‘Spa‘ >>> S[:3] ‘Spa‘ >>> S[:-1] ‘Spa‘ >>> S[:] ‘Spam‘
#在一个分片中,左边界默认为0,并且右边界默认为分片序列的长度。
>>> S+‘xyz‘ ‘Spamxyz‘ >>> S*8 ‘SpamSpamSpamSpamSpamSpamSpamSpam‘
#作为一个序列,字符串也支持使用加号进行合并(将两个字符串合成为一个新的字符串),或者重复(通过再重复一次创建一个新的字符串)。
#注意加号(+)对于不同的对象有不同的意义:对于数字为加法,对于字符串为合并。这是Python的一般特性,也就是我们将会在本书后面提到的多态。简而言之,一个操作的意义取决于被操作的对象。Python编写的操作通常自动地适用于不同类型的对象。