1 python对象类型
1 程序由模块构成
2 模块包含语句
3 语句包含表达式
4 表达式建立并处理对象
2 使用内置类型
1 内置对象使程序更容易编写
对于简单的任务,内置类型往往能够变现问题领域的所有结构。免费得到了如此强大的工具。例如,集合(列表)和搜索表(字典),可以马上使用它们。仅使用python内置对象类型就能够完成很多工作
2 内置对象是扩展的组件
对于较为复杂的任务,或许仍需要提供你自己的对象,使用python的类活C语言的接口。但就像本书稍后要介绍的内容,人工实现的对象往往建立在像列表和字典这样的内置类型的基础之上
例如,堆栈数据结构也许会实现为管理和定制内置列表的类
3 内置兑现往往比定制的数据结构更有效率
在速度方面,python的内置类型优化了用C实现数据结构算法。尽管可以实现属于自己的饿类似的数据类型,但往往很难达到内置数据类型所提供的性能水平
4 内置对象是语言的标准的一部分
因为Python的内置工具是标准的,它们一般都是一致的
独创的框架则在不同的环境都有所不同
3 Python的核心数据类型
1 内置对象
对象类型 | 例子 常量、创建 |
---|---|
数字 | 1234,3.1415,3+4j,Decimal,Fraction |
字符串 | ‘spam’,“guido‘s”,b’a/xolc‘ |
列表 | [1 , [2,'three'] , 4] |
字典 | {'food' : 'spam' , 'taste' : 'yum'} |
元组 | (1, 'spam' , 4 , 'U') |
文件 | myfile=open('eggs', 'r') |
集合 | set('abc') , {'a' , 'b' , 'c'} |
其他类型 | 类型、None、布尔型 |
编程单元类型 | 函数、模块、类 |
与实现相关的类型 | 编译的代码堆栈跟踪 |
1 数字
Python中的数字支持一般的数学运算
加号+代表加法,星号*表示乘法,双星号**表示乘方
>>> 123+222
345
>>> 1.5*4
6.0
>>> 2**100
1267650600228229401496703205376
打印浮点数:全精度以及用户友好的形式
python一起分发的还有一些常用的数学模块,模块只不过是我们导入以供使用的一些额外工具包
>>> import math
>>> math.pi
3.141592653589793
>>> math.sqrt(85)
9.219544457292887
math模块包括更高级的数学工具,如函数,而random模块可以作为所及数字的生成器和随机选择器
>>> import random
>>> random.random()
0.3266347154552137
>>> random.choice([1,2,3,4])
3
2 字符串
字符串是的单个字符的字符串的序列,其他类型的序列还包括列表和元组
1 序列的操作
>>> s='spam'
>>> len(s)
4
>>> s[0]
's'
>>> s[1]
'p'
反向索引
>>> s[-1]
'm'
>>> s[len(s)-1]
'm'
在一个分片中,左边界默认为0,并且右边界默认为分片序列的长度
>>> s[1:]
'pam'
>>> s
'spam'
>>> s[0:3]
'spa'
>>> s[:-1]
'spa'
>>> s[:]
'spam'
>>> s
'spam'
>>> s+'xyz'
'spamxyz'
>>> s
'spam'
>>> s*8
'spamspamspamspamspamspamspamspam'
2 不可变性
字符串在Python中具有不可变性——在创建后不能就地改变
可以通过建立一个新的字符串并以同一个变量名对其进项赋值
>>> s
'spam'
>>> s[0]='z'
Traceback (most recent call last):
File "<pyshell#31>", line 1, in <module>
s[0]='z'
TypeError: 'str' object does not support item assignment
>>> s='z'+s[1:]
>>> s
'zpam'
在核心类型中,数字、字符串和元组是不可变的
列表和字典不是这样的
3 类型特定的方法
字符串还有一些独有的一些操作作为方法存在(对象的函数,将会通过一个调用表达式触发)
字符串的find方法是一个基本的子字符串查找的操作(它将返回一个传入子字符串的偏移量,或者没有找到的情况下返回-1),而字符串的replace方法将会对全局进行搜索和替换
>>> s.find('pa')
1
>>> s.find('s')
-1
>>> s
'zpam'
>>> s.replace('pa','XYZ')
'zXYZm'
>>> s
'zpam'
split实现通过分隔符将字符串拆分为子字符串,大小写变换,测试字符串的内容(数字、字母或其他),去掉字符串后的空格字符
>>> line='aaa,bbb,ccccc,dd'
>>> line.split(',')
['aaa', 'bbb', 'ccccc', 'dd']
>>> s='spam'
>>> s
'spam'
>>> s.upper()
'SPAM'
>>> s.isalpha()
True
>>> line='aaa,bbb,ccccc,dd\n'
>>> line=line.rstrip()
>>> line
'aaa,bbb,ccccc,dd'
字符串还支持一个叫做格式化的高级替代操作
>>> '%s,eggs,and %s' % ('spam','SPAM!')
'spam,eggs,and SPAM!'
>>> '{0},aggs,and {1}'.format('spam','SPAM!')
'spam,aggs,and SPAM!'
4 寻求帮助
dir查询内置函数属性
>>> dir(s)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
help函数查看函数具体内容
>>> help(s.replace)
Help on built-in function replace:
replace(...) method of builtins.str instance
S.replace(old, new[, count]) -> str
Return a copy of S with all occurrences of substring
old replaced by new. If the optional argument count is
given, only the first count occurrences are replaced.
5 编写字符串的其他方法
>>> s='A\nB\tC'
>>> len(s)
5
>>> ord('\n')
10
>>> s='A\0B\0C'
>>> len(s)
5
5 模式匹配
导入一个re的模块
>>> import re
>>> match = re.match('Hello[\t]*(.*)world','Hello Python world')
>>> match.group(1)
' Python '
这个例子的目的是搜索子字符串,这个子字符串以“Hello,” 开始,后面跟着零个或几个制表符或空格,接着有任意字符串并将其保存至匹配的group中,最后以”world.“结尾。如果找到了这样的子字符串,与模式中括号包含的部分匹配的子字符串的对应部分保存为组
>>> match = re.match('/(.*)/(.*)/(.*)','/usr/home/lumberjack')
>>> match.groups()
('usr', 'home', 'lumberjack')
3 列表
1 序列操作
>>> L = [123, 'spam', 1.23]
>>> len(L)
3
>>> L[0]
123
>>> L[:-1]
[123, 'spam']
>>> L+[4,5,6]
[123, 'spam', 1.23, 4, 5, 6]
>>> L
[123, 'spam', 1.23]
2 类型特定的操作
列表没有固定大小,也就是说能够按照需要增加或减小列表大小,来响应其特定的操作 append插入数据 pop移除数据
>>> L.append('NI')
>>> L
[123, 'spam', 1.23, 'NI']
>>> L.pop(2)
1.23
>>> L
[123, 'spam', 'NI']
sort方法,默认按照升序对列表进行排序
reverse对列表进行翻转
>>> M=['bb','aa','cc']
>>> M.sort()
>>> M
['aa', 'bb', 'cc']
>>> M.reverse()
>>> M
['cc', 'bb', 'aa']
3 边界检查