Python核心编程笔记(1~5)

七 2nd, 2013

基本配置及基础语法(1, 2章)

1 Python.exe 的解释器options:

1.1 –d   提供调试输出
1.2 –O   生成优化的字节码(生成.pyo文件)
1.3 –S   不导入site模块以在启动时查找python路径
1.4 –v   冗余输出(导入语句详细追踪)
1.5 –m mod 将一个模块以脚本形式运行
1.6 –Q opt 除法选项(参阅文档)
1.7 –c cmd 运行以命令行字符串心事提交的python脚本
1.8 file   以给定的文件运行python脚本

2 _在解释器中表示最后一个表达式的值.

3 print支持类c的printf格式化输出: print “%s is number %d!” % (“python”, 1)

4 print的输入内容后面加逗号, 就会使其输入不换行

5 把输出重定向到日志文件:

logfile = open(“c:/1.log”, “a”);   //打开文件c:/1.log使用a模式..即add, 添加.
print >> logfile, “Fatal error: invalid input!”;   >>为重定向..将print的结果重定向到logfile, 输出内容是”Fatal error: invalid input!”…
logfile.close();  //关闭文件流…

6  程序输入: raw_input(“提示字符串”): user = raw_input(“请输入您的姓名”);

7  int(数值)…..将数值字符串转换成整数值… int str list….

8  运算符:

8.1 + – * / %是和其他语言相同的加减乘及取模运算.取余运算
8.2 / 在浮点取模中得到的结果是完整的浮点数
8.3 // 在浮点取模中得到的结果是经过舍去运算的结果.
8.4 ** 是乘方
8.5 >>和<<的移位运算也支持. 但不支持java中的>>> 和<<< 移位.
8.6 <  <= > >= ++ != <> 等比较运算符
8.7 and or not 等逻辑运算符

9  变量和赋值: python是弱类型语言..

10 list, tuple, map * 4 得到的结果是一个新的 list | tuple | map, 是原数据的4份

11 数字:

11.1 int(有符号整数)
11.2 long(长整数)
11.3 bool(布尔值)
11.4 float(浮点值)
11.5 complex(复数)
11.6 python2.3开始, 如果结果从int溢出, 会自动转型为long
11.7 python2.4开始支持decimal数字类型, 需要导入decimal模块..由于在二进制表示中会有一个无限循环片段, 普通的浮点1.1实际是不能被精确表示的, 被表示为1.1000000000000001. 使用print decimal.Decimal(‘1.1’);则可以得到精确的1.1

12 字符串:  引号之间的字符集合, 支持使用成对的单引号和双引号, 三引号(三个连续单引号或双引号)可以用来包含特殊字符.  使用索引运算符[]和切片运算符[ : ]可以得到子字符串…字符串中第一个字符的索引是0, 最后一个字符的索引是-1;

13 列表和元组: 可以看作是普通的数组, 能保存任意数量任意类型的python对象…

13.1 列表元素用中括号包裹, 元素的个数及元素的值可以改变.
13.2 元组元素用小括号包裹, 不可以更改, 尽管他们的内容可以, 元组可以看成是只读的列表.  可以使用切片运算得到子集.

14 字典: 相当于其他语言中的map, 使用{key: value}的方式表示. 取值的方式和其他语言的map一致.  也可以直接使用map[key] = value的方式为其赋值.

15 条件语句:

if expression:
path 1
elif expression2:
path2
else:
path3

16 while循环

while expression:
process business

17 for循环

for item in list|tuple|map:
print item
17.1 range(len(list))得到一个list长度范围内的整数list, 方便遍历过程中获取索引值.
17.2 python2.3中增加了enumerate(), 可以通过它遍历list, 同时得到索引和值
for index, data in enumerate(list):
print index, “:”, data,
17.3 列表解析: sqdEvens = [x ** 2 for x in range(8) if not x % 2], 获取一个序列, 该序列是0-8的数字中所有x%2为0(false)的x的平方

18 文件和内建函数: open(), file()

18.1 handle = open(file_name, access_mode = “r”), 只读方式打开文件, 得到的句柄是handle..该方法如果没有提供access_mode, 默认是r

19 异常处理: raise可以故意引发异常

try:
# process
except IOError, e:
# error process

20 函数: 如果函数中没有return语句, 自动返回None对象

def function_name([arguments]):
“optional document string”
function_suite

20.1 python的函数调用中参数是引用传递

20.2 可以在定义函数的时候, 在参数列表中通过=设置参数的默认值.

21 类:

21.1 定义:
class class_name:
static_variable_name = value
def __init__(self, [arguments]):
//operation
//self in here is the reference for this class instance
def general_method_name(self, [arguments]):
//operation
//self is the class instance
//if you want to use class variable, please use like self.__class__.__name__
21.2 实例化: instance = class_name([arguments, …]);

22 模块: 不带.py后缀名的文件名…一个模块创建之后, 可以使用import导入这个模块使用.

22.1 访问模块内的函数或变量: module_name.function() |  module_name.variable | module_name.class_name
22.2 sys模块概览
22.2.1 sys.stdout.write(‘Hello World!\n’)  //使用sys模块的标准输出=print ‘hello world’
22.2.2 sys.platform  //返回系统的标记
22.2.3 sys.version  //返回系统的版本

23 PEP: 一个PEP就是一个python增强提案(python enhancement proposal), 是在新版python中增加新特性的方式…索引网址是: http://python.org/dev/peps

24 一些常用函数

24.1 dir([obj])  显示对象的属性, 如果没有提供参数, 显示全局变量的名字
24.2 help([obj])  显示对象的文档, 如果没有参数, 进入交互式帮助
24.3 int(obj)  将一个对象转换为整数
24.4 len(obj)  返回对象的长度
24.5 open(file_name, mode)  以mode(r|w|a…)方式打开一个文件
24.6 range([[start, ]stop[, step]])  返回一个整数列表…结束值是stop-1, step默认是1
24.7 raw_input(str)  提示str等待用户输入
24.8 str(obj)  将一个对象转换为字符串
24.9 type(obj)  返回对象的类型…返回值本身是一个type对象
24.10 sum(iterable[, start=0])  可以对纯数值的list|tuple|map进行求和操作..
24.11 dir([object])  如果没有参数获得当前脚本scope内定义的对象, 如果有参数, 返回该对象内部定义的对象, 如果该对象有一个__dir__方法, 该方法将被调用, 并且必须返回属性的列表…这就允许通过自定义__getattr__()或__getattribute__()方法的方式实现dir的自定义显示属性列表….如果没有指定参数, 是根据该对象的__dict__内存字典的最佳聚合信息显示的..
24.12 type([object])  参数为空显示<type ‘type’>, 参数不为空显示该对象的类型
24.13 type(name, bases, dict)  通过名称, 基类, 内存字典动态创建一个类型
24.14 object__name.__doc__  查看该对象的文档字符串
24.15 __doc__ 对象的文档字符串, 该文档字符串在定义对象时写在对象语句块中第一句, 使用单纯的字符串的方式表示
24.16 sys.exit()  退出python解释器
24.17 append(Object)  给list添加一个元素
24.18 os.linesep 返回的是系统换行符…不同的系统换行符是不同的, 使用linesep可以提高代码跨平台性
24.19 string_variable_name.strip([chars])  脱离, 滤去字符串中的某些字符, 如果没有参数返回原字符串

25 数值按进制分为:

25.1 二进制: 0b101010
25.2 八进制: 07167
25.3 十进制: 98767
25.4 十六进制: 0xf2134

Python基础(chapter3)

1 setence and syntax语句和语法

1.1 #为注释符号
1.2 \n是标准行分隔符, 通常一个语句一行
1.3 反斜线\表示下一行继续, 用来将单条语句放入多行…尽量使用括号代替
1.4 分号;表示将两个语句连接在一行中…不提倡
1.5 冒号:表示将代码块的头和体分开
1.6 语句(代码块)用缩进块方式体现: 同一个代码组的代码必须严格左对齐..由于不同的editor制表符宽度不一, 为了使代码跨平台, 推荐使用4个空格缩进
1.7 不同缩进深度分隔不同的代码块
1.8 python文件以模块的形式组织: 模块以磁盘文件的形式存在, 不应该让某个模块充斥的太大

2 赋值

2.1 赋值语句没有返回值, 但可以使用链式赋值
2.2 python2.0开始支持增量赋值(算符和等号连接赋值), 但是python不支持++, —
2.3 赋值操作中, 可变对象会被直接修改(引用位置值的修改), 不可变对象则被重新赋予新的对象(引用修改)
2.4 多元赋值: a, b, c = 1, 2, ‘string’, 建议使用tuple的方式进行多元赋值: (a, b, c) = (1, 2, ‘string’)

3 swap操作: x, y = y, x

4 标识符

4.1 大小写敏感
4.2 python的关键字列表和iskeyword()函数在keyword模块, 方便查阅
4.3 内建: built-in可以看作是系统保留字….对于一些内建函数需要覆盖(重定义, 替换)…built-in是__builtins__模块的成员, 该模块由解释器自动导入
4.4 python不支持重载
4.5 下划线: 作为变量前缀和后缀指定特殊变量
4.5.1 _xxx: 不用’from module import*’导入
4.5.2 __xxx__: 系统定义名字
4.5.3 _xxx: 类中的私有变量名

5 python之禅

The Zen of Python, by Tim Peters
python之禅. 作者Tim Peters
Beautiful is better than ugly.
漂亮胜于丑陋
Explicit is better than implicit.
详尽胜于含蓄
Simple is better than complex.
简单胜于复杂
Complex is better than complicated.
组合胜于复杂(结构)
Flat is better than nested.
单一胜于嵌套
Sparse is better than dense.
稀少胜于繁杂
Readability counts.
可读性价值
Special cases aren’t special enough to break the rules.
特例不足以违反规则
Although practicality beats purity.
实践胜于理论
Errors should never pass silently.
错误可能从不沉默
Unless explicitly silenced.
除非明白沉默
In the face of ambiguity, refuse the temptation to guess.
面对歧义, 不被猜想诱惑
There should be one– and preferably only one –obvious way to do it.
可能仅有一种更好的方法
Although that way may not be obvious at first unless you’re Dutch.
Now is better than never.
现在胜于一切
Although never is often better than *right* now.
If the implementation is hard to explain, it’s a bad idea.
难于解释的实现是不好的
If the implementation is easy to explain, it may be a good idea.
易于明白的实现可能是个好方案
Namespaces are one honking great idea — let’s do more of those!
名空间是一个好方案, 让我们去超越这些

6 模块组织

# 起始行
# 模块文档
# 模块导入
# 变量定义
# 类定义
# 函数定义
# 主程序

7 __name__用于指示模块应该如何被加载, 如果值是”__main__”说明是主模块, 如果是模块名, 说明是被导入的

8 主模块测试代码

def main():
# business process
if(__name__ == ‘__main__’)
main()

9 内存管理

9.1 基本
9.1.1 弱类型 – 动态类型
9.1.2 programmer不关心内存管理
9.1.3 变量并会被回收
9.1.4 del语句能够直接释放资源
9.2 变量未初始化不允许使用
9.3 引用计数: 对于一个内存堆中的对象, 有多少个指针引用它..引用计数就是多少, 引用计数为0时, 该对象可以被垃圾回收器回收
9.3.1 增加
9.3.1.1 对象创建
9.3.1.2 别名创建(引用赋值)
9.3.1.3 参数传递(引用传值)
9.3.1.4 被容器引用
9.3.2 减少
9.3.2.1 引用生命周期结束
9.3.2.2 对象别名被显示销毁 del y
9.3.2.3 对象别名被赋予其他引用
9.3.2.4 窗口对象本身被销毁
9.3.3 del
9.3.3.1 从现在的名字空间中删除一个别名
9.3.3.2 对象的引用计数减一
9.4 垃圾回收: 有对象引用计数为0, 对象被显示告知需要销毁, 有内存消耗大户存在导致系统压力较大时, 垃圾回收机制运行, 清理需要回收的内存区域…垃圾回收机制还有一个循环垃圾回收器, 确保释放循环引用对象(a引用b, b引用a, 导致其引用计数永远不为0)

10 将引入的其他模块中常用的变量重新赋予一个本地别名(ls = os.linesep)不仅可以避免冗长的变量名, 又可以提高加载速度(因为现在是本地变量了)

11 重要的其他模块

11.1 debugger: pdb允许设置断点, 逐行调试, 检查堆栈, 还支持事后调试
11.2 logger: logging分紧急, 错误, 警告, 信息, 调试五级日志
11.3 profilers: 性能测试器
11.3.1 profile: python编写, 测试函数执行时间, 每次脚本执行总时间.
11.3.2 hotshot: python2.2, c编写, 解决了性能测试过载问题, 但需要更多时间生成结果, python2.5修正了hotshot的时间计量bug
11.3.3 cProfile: python2.5, c编写, 需要较长时间从日志文件载入分析结果, 不支持子函数状态细节, 某些结果不准

python对象(chapter4)

1 python对象有三个特征: 身份和类型是只读的, 如果对象支持不支持更新操作, 那么值也就是只读的.

1.1 身份: 唯一的身份标识, 可以使用内建函数id()得到, 可以看作是对象的内存地址…
1.2 类型: 对象的类型决定该对象保存什么类型的值, 可以进行什么操作, 遵循什么规则., 可以使用内建函数type()查看python对象的类型.
1.3 值: 对象表示的数据项

2 对象属性: 主要有属性, 值, 相关联的可执行代码(method), 一些python类型也有数据属性, 含有数据属性的对象包括但不限于: 类, 类实例, 模块, 复数, 文件.

3 基础数据类型: 数字, 整形, 布尔型, 长整型, 浮点型, 复数型, 字符串, 列表, 元组, 字典.

4 其他内建类型: 类型, None, 文件, 集合/固定集合, 函数/方法, 模块, 类

4.1 type(type(1)) 可以看出类型对象本身也是对象, 它的类型是type
4.2 None的类型是NoneType, NoneType只有一个值, 就是None, 不支持任何运算也没有任何内建方法, 布尔值总返回False

5 每个对象天生都有布尔值, 以下对象的布尔值是False

5.1 None
5.2 False(bool类型)
5.3 所有值为0的数
5.4 ‘’ 空字符串
5.5 [] | () | {} 空列表, 空元组, 空字典
5.6 用户创建的实例如果定义了nonzero(__nonzero__())或length(__len__())且值为0, 那么返回的布尔值也是False

6 当要获取一个对象的布尔值的时候, 首先会调用__nonzero__(必须返回布尔类型或者int类型.)方法, 如果实现了该方法, 就返回该方法返回的布尔值, 如果没有实现该方法, 继续调用__len__方法(该方法返回值必须是大于等于0的), 如果实现了__len__方法, 就根据其返回值返回布尔值.

7 内部类型: python内部机制

7.1 代码: 编译过的python的源代码片段, 是可执行对象. 通过调用内建函数compile()可以得到代码对象. 代码对象可以被exec命令或eval()内建函数来执行.   代码是用户自定义函数的核心, 运行期获得上下文..  __code__是函数的一个属性, 函数除了代码这个属性, 还有函数名, 文档字符串, 默认参数, 全局命名空间等必须的属性
7.2 帧对象: 用于跟踪记录对象
7.3 跟踪记录: 用于异常发生时, 程序访问跟踪记录对象处理程序.
7.4 切片:
7.4.1 步进切片sequence[::number] number为负数, 倒序显示字符串, 正数则正序显示字符串, 数值代表显示字符的step值.
7.4.2  多维切片 sequence[start1: end1, start2: end2]
7.4.3  省略切片 sequence[…, start1: end1]
7.4.4 切片对象 使用slice([start, ]stop[, step])可以创建一个切片对象
7.5 省略对象: 用于扩展切片语法, 起记号作用..在切片语法中表示省略号, 省略对象有一个唯一的名字Ellipsis, 布尔值始终是True
7.6 Xrange: 调用xrange()生成Xrange对象, 类似内建函数range, 用于节省内存使用或range无法完成的超大数据集场合

8 标准类型运算符

8.1 对象值比较
8.1.1 数字根据大小比较
8.1.2 字符串根据字符先后顺序比较
8.1.3 list | tuple | dict顺序按照其中元素(dict按照键)比较
8.1.4 链式比较相当于多个比较使用and连接
8.1.5 自定义类型对象的比较是引用值比较, 也就是id(object_name)的比较
8.2 对象身份比较
8.2.1 is / is not用来比较两个别名是否引用同一个对象
8.2.2 整数对象和字符串对象是不可变对象…
8.3 布尔类型运算符: and, or, not

9 标准类型内建函数

9.1 cmp(obj1, obj2)  比较obj1和obj2, 根据比较结果返回整数i, i<0 → obj1<obj2, i>0 → obj1>obj2, i==0 → obj1 == obj2….自定义类型中通过定义方法__cmp__(target)来实现….使用比较运算符, 或直接调用cmp时该方法被调用
9.2 type(obj)  得到一个对象的类型, 返回相应的type对象
9.3 str(obj)  返回对象适合可读性好的字符串表示…在自定义类中使用__str__(self)返回一个字符串, 调用str(obj)时会被隐式调用
9.4 repr(obj)  返回一个对象的字符串表示, repr返回的字符串通常可以被用于使用eval动态创建一个对象.  通常 obj == eval(repr(obj))是成立的
9.5 “, 反单引号, `obj`和repr(obj)做的事情是一样的.
9.6 isinstance(obj, (type[, type, …]))  判断obj是不是第二个参数tuple中的列举的类型的实例
9.7 types模块提供一些已知的类型
9.8 由于每一种类型都只有一个类型对象, 所以, 可以使用引用比较代替值比较以提升性能: 用if type(num) is types.IntType 替代if type(num) == types.IntType
9.9 from-import: 只引入某个模块的一部分属性: 比如from types import IntType 这样做可以有效的减少查询次数
9.10 python的operator模块中有绝大多数运算符对应的同功能的函数可供使用.

10 类型工厂函数: int(), long(), float(), complex(), str(), Unicode(), basestring(), list(), tuple(), type(), dict(), bool(), set(), frozenset(), object(), classmethod(), staticmethod(), super(), property(), file()

11 标准类型的分类:

11.1 标准类型是”基本内建数据对象原始类型”
11.1.1 基本: 是python的标准或核心
11.1.2 内建: python默认提供
11.1.3 数据: 用于一般数据存储
11.1.4 对象: 对象是数据和功能的默认抽象
11.1.5 原始: 这些类型提供的是最底层的粒度数据存储
11.1.6 类型: 本身就是数据类型
11.2 按存储模型进行分类:
11.2.1 标量/原子类型: 数值, 字符串等可以存储单一字面对象的类型.
11.2.2 容器类型: 列表, 元素, 字典等可以存储多个字面变量的类型, python中的容器类型都可以存储不同类型的元素
11.3 按更新模型进行分类:  对象创建之后, 值不可以改变, 注意: 这里是对象, 而不是变量
11.3.1 可变类型: 列表, 字典
11.3.2 不可变类型: 数字, 字符串, 元组
11.4 按访问模型进行分类: 访问对象的方式
11.4.1 直接访问: 数值
11.4.2 顺序访问: 列表, 元组, 字符串等可以按照索引访问的类型
11.4.3 映射访问: 字典

12 不支持的类型: char, byte, pointer

数字(chapter5)

1 支持的数字类型: 整型, 长整型, 布尔型, 双精度浮点型, 十进制浮点型和复数

2 整型

2.1 布尔型  包含True和False两个值的整型
2.2 标准整数类型  0x表示十六进制, 无前缀表示十进制, 0表示八进制, 0b表示二进制
2.3 长整型  整数后加L, 表示范围与可用内存大小有关..

3 双精度浮点数: 一个符号位, 52个底位, 11个指数位. 使用后缀e表示指数

4 复数: 实数 + 序数J构成一个复数

4.1 python中的复数概念
4.1.1 虚数不能单独存在, 总是和一个值为0.0的实数部分一起构成一个复数
4.1.2 复数由实数部分和虚数部分组成
4.1.3 表示虚数的语法: real + imagJ
4.1.4 实数部分和虚数部分都是浮点数
4.1.5 虚数部分必须有后缀j或J
4.2 复数的内建属性
4.2.1 real 复数的实部
4.2.2 imag 复数的虚部
4.2.3 conjugate() 返回该复数的共轭复数

5 强制类型转换规则

 

6 python提供python解释器的启动参数Qdivision_style, -Qnew执行新的除法行为, -Qold执行传统除法行为, 默认是-Qold…-Qwarn和-Qwarnall可以用来度过过渡期

7 幂运算符** 比左侧单目运算符优先级高, 比右侧单目运算符优先级高

8 位运算符: ~, &, |, ^, <<, >>

8.1 负数会被当成正数的二进制补码处理
8.2 左移和右移N位等同与无溢出检查的2的N次幂运算
8.3 长整数的位运算使用一种经过修改的二进制补码形式, 使的符号位可以无限左移
8.4 ~是单目运算符

9 内建函数和工厂函数

9.1 数字类型函数:
9.1.1 转换工厂函数: int(), long(), float(), complex(), 接受参数第一个是要转换的值, 第二个是进制..如果要转换的值是string才能使用第二个函数指定进制.
9.1.1.1 python2.2开始, 加入了bool(), 用来将整数1和0转换成为标准布尔值(所有非0数都返回True).
9.1.1.2 python2.3的标准数据类型添加了Boolean类型, true和false也有了常量值True和False, 而不再是1和0
9.1.1.3 bool(obj) 返回obj对象的布尔值, 也就是obj.__nonzero__()
9.1.1.4 complex(real, imag=0.0)
9.1.2 功能函数
9.1.2.1 abs(number) 返回数字的绝对值, 如果是复数, 返回math.sqrt(num.real2 + num.imag2)
9.1.2.2 coerce(number1, number2): 返回按照类型转换规则转换得到的两个数字组成的元组
9.1.2.3 divmod(number1, number2)  返回一个包含商和余数的元组, 整数返回地板除和取余操作结果, 浮点数返回的商部分是math.floor(number1/number2), 复数的商部分是ath.floor((number1/number2).real)
9.1.2.4 pow()和**功能相同
9.1.2.5 round(number[, base]) 对浮点数进行四舍五入运算, base参数是小数位参数, 如果不指定, 返回与第一个参数最接近的整数的浮点形式
9.1.2.6 int() 直接去掉小数部分, floor()得到最接近但小于原数的整数, round()得到最接近原数的整数
9.1.3 整数的内建函数: hex(), oct(), bin()…ord(“A”) 接受一个ascii或unicode字符, 返回相应的unicode值 ⇐⇒  char(65L)接受unicode码值, 返回对应的unicode字符.

10 其他数字类型

10.1 布尔数:
10.1.1 布尔型是整型的子类, 但是不能再被继承而生成它的子类.
10.1.2 没有__nonzero__()方法的对象默认值是True
10.1.3 对于值为0的任何数字或空集(空的list|tuple|dict)在python中值都是False
10.1.4 数学运算中, True ==1, False == 0
10.2 十进制浮点数: from decimal import Decimal

11 数字科学计算的包

11.1 高级的Third package: Numeric(NumPy)
11.2 python自带的数字类型相关模块
11.2.1 decimal  十进制浮点运算类Decimal
11.2.2 array  高效数值数组(字符, 整数, 浮点数)
11.2.3 match/cmatch  标准c库数学运算函数. 常规数学运算在match, 复数运算在cmatch
11.2.4 operator  数字运算符的函数实现
11.2.5 random  伪随机数生成器
11.2.5.1 randint(start, end)随机生成start, end之间的一个整数
11.2.5.2 uniform(start, end)随机生成范围内的一个浮点数
11.2.5.3 randrange([start ,]stop[, step])随机生成start, stop内按step步增数字范围的一个整数
11.2.5.4 choice(sequence)随机返回给定的序列中的一个元素

 





除非注明,本站文章均为原创。本文基于 BY-NC-SA 协议进行授权,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名 metaboy(包含链接).

本文链接地址: http://blog.wangyuxiong.com/archives/52014

订阅本站:http://www.wangyuxiong.com/feed

分类: 读书笔记         标签: ,
目前还没有任何评论.

无觅相关文章插件,快速提升流量