第1章 基础知识
1.2 交互式解释器1.4 数字和表达式*整数除法:1/2=0(可使用from __future__ import division或者附加-Qnew执行)1.4.1 长整型数(将在大数后面加L)1.4.2 十六进制和八进制(用开头确定:0xAF(175),010(8))1.5 变量(直接用=赋值)1.7 获取用户输入(input("")等)1.9 模块*from 模块 import 函数*可以用变量引用函数(foo=math.sqrt)1.9.1 cmath和复数(cmath.sqrt支持复数)1.10 保存并执行程序1.10.3 注释(用#)1.11 字符串1.11.1 单引号字符串和转义引号单双引号没区别。转移在前面加上\。1.11.2 拼接字符串(可用+拼接)1.11.3 字符串表示,str和reprstr可以转换值为字符串。repr,以Python表达式形式表示值。可以比较str(10000L)和repr(10000L)。反引号效果跟repr一样,但是不推荐使用,因为3以上不支持。1.11.4 input和rawinpm的比较input会假设用户输入的是合法的Python表达式(与repr相反)。row_input会把所有的输入当初原始数据(row_data)。如: 对于name = input("name:"),只能输入"hcbbt",而直接hcbbt不带双引号会报错。1.11.5 长字符串、原始字符串和Unicode长字符串:如果字符串要跨多行,可以用三个引号‘‘‘(or""")代替普通引号。*这里和用\加回车跨行的区别是,用\加回车输出会把各个行凑一行,而三个引号则一样跨行。原始字符串:在引号前面加上r可以使用原始字符串,字符串里面无法再转移。*这里比较麻烦的是处理字符串里面的引号,里面的引号前面加上\后输出的原始字符串也会有\的,这里可以用单双括号混合用来绕开这个问题。另外注意原始串最后面不能是\,否则识别不了。Unicode字符串:在字符串前使用u前缀。
第2章 列表和元组
2.1 序列概览列表和元组的主要区别在于,列表可以修改,元组则不能。一般来说,在几乎所有的情况下列表都可以替代元组。(例外情况:使用元组作为字典的键。)2.2 通用序列操作2.2.1 索引序列中的所有元素都是有编号的--从0开始递增。这些元素可以通过编号分别访问。*字符串就是一个由字符组成的序列。字符串字面值能够直接使用索引,如‘Hello‘[1] = ‘e‘如果一个函数调用返回一个序列,那么可以直接对返回结果进行索引操作。*索引可以为负数。2.2.2 分片第1个索引的元素是包含在分片内的,而第2个则不包含在分片内。可显式设置步长(不能为0)。2.2.3 序列相加(使用加号。)两种相同类型的序列才能进行连接操作。2.2.4.乘法(重复n次)空列表:[],空值:None。初始化:[None] * 102.2.5 成员资格(关键字in,返回值True/False)2.2.6 长度、最小值和最大值len(nums)\max(nums)\min(nums)2.3 列表:Python的“苦力”2.3.1 list函数string->list: list(str)list->string: ‘‘.join(somelist)2.3.2 基本的列表操作元素赋值:用下标赋值。删除元素:del names[2]。分片赋值:可以使用与原序列不等长的序列将分片替换。长插短,短插长都可以。如:name = list(‘Perl‘) name[1:]=list(‘ython‘),此时‘‘.join(name)=‘Python‘也可以通过分片删除元素:name[1:2] = [],‘y‘就被删掉了。2.3.3 列表方法对象.方法(参数)append:在列表后追加新对象。count:统计某个元素在列表中出现的次数。extend:可以在列表的末尾一次性追加另一个序列中的多个值。(修改了前面的列表)(a.append(b)等价于分片赋值a[len(a):] = b)index:从列表中找出某个值第一个匹配项的索引位置。(不存在会引发异常)insert:用于将对象插入到列表中。a.insert(3,‘test‘)在下标为3的位置插入‘test‘。pop:会移除列表中的一个元素(默认是最后一个),并且返回该元素的值。remove:移除列表中某个值的第一个匹配项。(第一次出现的值)reverse:将列表中的元素反向存放。(不会返回列表,而是返回迭代器。可使用list(reserved(x))返回列表)sort:用于在原位置对列表进行排序。(返回了空值)(可用sorted()函数返回列表)关于sort高级排序:内建函数cmp(x,y)在x < y时返回负数,在x > y时返回正数,如果x = y则返回0。sort默认用的是cmp,我们可以直接写比较函数并调用。如a.sort(cmp2)sort方法有另外两个可选的参数--键函数key(如key=len)和布尔值reverse(True即反向,False正向,默认False)。2.4 元组:不可变序列元组和字符串都不能修改。空元组可以用没有包含内容的两个圆括号来表示。2.4.1 tuple函数以一个序列或字符串作为参数并把它转换为元组。2.4.2 基本元组操作(除了无法修改之外和列表差不多)2.4.3 那么,意义何在元组可以在映射(和集合的成员)中当作键使用--而列表则不行。
第3章 使用字符串
3.1 基本字符串操作
除了不可修改和列表一样。
3.2 字符串格式化:精简版
用包含转换说明符的字符串+%+元组或字典实现。如:"Hello, %s. %s enough for ya?" % (‘world‘, ‘Hot‘)。(如果用列表会被当成一个值)
*如果要在格式化字符串里包含百分号,那么必须使用%%。
**模版字符串,需要from string import Template。关键字为$,Template,方法为substitute。(同样如果要输出$就要使用$$了。)(还可以使用字典的映射键设置关键字)
如:Template(‘Hello, $x. ${y}t enough for ya?‘).substitute(x=‘world‘, y=‘Ho‘)
3.3 字符串格式化:完整版(跟c等其他语言的转换说明符一样,不想多说)
3.3.1 简单转换3.3.2 字段宽度和精度(可以用%*s,后面元组里面加上数值表示*位置的数)3.3.3 符号、对齐和0填充(%a10s,a为0表示0填充,-表示左对齐,+为标出正负(+0))
3.4 字符串方法
字符串常量(import string):string.digits/ letters/ ascii_letters/ lowercase/ uppercase/ printable/ punctuation
3.4.1 find(查找第一个匹配子串,没有找到返回-1,可以提供起点和终点)3.4.2 join(‘+‘.join([‘1‘,‘2‘,‘3‘]))(队列中添加元素(注意:需要添加的队列元素都必须是字符串))3.4.3 lower(返回字符串的小写字母版)(title方法和string.capwords:单词首字母大写)3.4.4 replace(所有匹配项均被替换)3.4.5 split(将字符串分隔成序列,与join相反)3.4.6 strip(返回去除两侧空格的字符串)(可指定去除字符串,参数为所有要去除的字符组成的字符串)3.4.7 translate(同时替换多个字符,得先制作转换表。如:a=‘Hello,world‘ t=a.maketrans(‘l‘,‘a‘) a.translate(t))
第4章 字典:当索引不好用时
字典是python中唯一内建的映射类型。字典中的值并没有特殊的顺序。
4.2 创建和使用字典
phonebook={‘A‘:‘1111‘, ‘B‘:‘2222‘, ‘C‘:‘3333‘}
4.2.1 dict函数*dict是一个类型。通过其他字典或(键,值)序列来建立字典:items = [(‘A‘,‘1111‘),(‘B‘,‘2222‘)] pb = dict(items)或者直接用关键字参数创建:pb = dict(A=‘1111‘, B=‘2222‘)4.2.2 基本字典操作len(d):长度d[k]:取键k的值d[k]=b:赋值(关联)del d[k]:删除项k in d:检查键*键类型是不可变类型4.2.3 字典的格式化字符串"AAA‘s phone number is %(AAA)s." % phonebook4.2.4 字典方法clear:清除字典中所有的项目。copy:返回一个具有相同键值对的新字典。*这是浅复制,值是相同的,不是副本复制!*用deepcopy可以实现深复制(from copy import deepcopy)fromkeys :使用给定的键建立新的字典,每个键默认对应的值为None(可以自己提供默认值)。get:更宽松的访问字典项的方法,字典中不存在的项会返回None(可以自己提供默认值)。has_key:检查字典中是否含有给出的键。(3.0没有此函数)items:将所有的字典项以列表方式返回,返回时没有特殊的顺序。(iteritems返回迭代器)keys:将键以列表方式返回,iterkeys同iteritems。pop:弹出对应值并删去该项。popitem:随机弹出项。(因为没有顺序)setdefault:和get差不多,如果键不存在会更新字典。update:利用一个字典项更新另外一个字典。values:以列表的形式返回字典中的值。(可重复)(itervalues返回迭代器)
第5章 条件、循环和其他语句
5.1 print和import的更多信息5.1.1 使用逗号输出(多个表达式,多句不换行)(打印元组要在外层加())5.1.2 把某件事作为另一件事导入import 模块:把模块中的函数导入当前的语义表(as 别名)from 模块 import 函数1,函数2...:直接导入命名from 模块 import *:导入所有除了以下划线_开头的命名。5.2 赋值魔法5.2.1 序列解包(x,y,z=1,2,3分别复制,x,y=y,x交换值,x,y,z=(1,2,3)序列赋值)(3.0可以用星号运算符收集多余元素)5.2.2 链式赋值(将同一个值赋给多个变量的捷径。)5.2.3 增量赋值(-=\+=\*=\/=\...)5.3 语句块:缩排的乐趣(4个空格缩进,冒号表示语句块开始)5.4 条件和条件语句5.4.1 这就是布尔变量的作用标准值Flase和None、所有类型的数字0(浮点型、长整型和其他类型等)、空序列(如空字符串、元组和列表)以及空字典都为假。其他解释为真。(使用bol()函数转换)5.4.2 条件执行和if语句(和其他语言一样,不想多说)5.4.6 更复杂的条件1.0<age<100 连接比较2.in, not in 成员资格运算符3.is, not is 同一性运算符(是否同一对象)4.字符串序列比较:字典序5.and优先级大于or5.4.7 断言(在程序中置入检查点 assert 0<age<100)5.5 循环5.5.1 while循环5.5.2 for循环for x in lst:print x可以用range(a,b)实现[a,b)的整数序列。*range直接创建序列(2.x下),xrange()一次只创建一个数,适合大序列。(可加步长)5.5.3 循环遍历字典元素for key(or value) in dictionary: pass5.5.4 一些迭代工具可以用zip把多个序列打包起来变成元组序列,然后就方便for了。(for x in zip(a,b):...,如果len(a)<len(b),len(zip(a,b))==len(a))enumerate():枚举容器中的序列和值,返回为迭代器。reversed()返回迭代器,sorted()返回列表。5.5.5 跳出循环(break、continue)5.5.6 循环中的else子句(没调用break后执行)5.6 列表推导式——轻量级循环[表达式 for 变量 in 列表 if 条件](for和if可以多个)5.7 三人行5.7.1 什么都没发生(pass)5.7.2 使用del删除(不仅会移除一个对象的引用,还会移除那个名字本身)5.7.3 使用exec和eval执行和求值字符串exec:执行里面的字符串,可以增加作用域scope。(如g = {} exec "a=1" in g等效于exec("a=1", g))(可以指定多个作用域)eval:用于“求值“,会返回值。