《Python基础教程》第1~5章 学习笔记

第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和repr
     str可以转换值为字符串。
     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] * 10
2.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." % phonebook
4.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优先级大于or
5.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: pass
5.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:用于“求值“,会返回值。

《Python基础教程》第1~5章 学习笔记

上一篇:python的reduce,lambda,和排序


下一篇:C# int32与byte[] 互转 / C/C++ int与BYTE[]互转