- 浏览: 347966 次
- 性别:
- 来自: 福州
文章分类
最新评论
-
18215361994:
chrome扩展中可以获取开发者工具所有资源不?
Chrome 插件开发 -
lBovinl:
完全是一头雾水~o(︶︿︶)o 唉
乱七八糟的Ruby笔记 -
zhangyanan_it:
楼主总结的好多!想问下:map.resources :role ...
Rails随记 -
justin_chiang:
...
Propertiess资源文件的读取和简单的性能测试 -
lezi2012:
感谢分享!!!感谢分享!!!感谢分享!!!感谢分享!!!感谢 ...
Rails随记
本文为dive into python中文版笔记--感谢翻译人员的工作
...
2.5 代码缩进,与Java不同,没有固定的{}表示代码块,Python使用缩进表示块的开始,取消缩进表示块的结束
一般使用4个空格表示,并不一定需要4个,只要一致即可
Python 使用硬回车来分割语句,冒号和缩进代码块。
2.6 模块测试: 主要指用于辨认当前模块的类型(注: 模块也是对象),使用内置的__name__属性,通常是模块的
文件名,不带扩展名,如果当前模块是被直接运行的,那将会使用特殊的默认名__main__
使用 if __name__ == "__main__":
Chapter 3 内置数据类型
3.1: Dictionary(dict) 字典--键值对,类似Java中的Hashtable的实现
定义: d = {"server":"mpilgrim", "database":"master"}
访问: d["server"]
操作: 直接d["server"]=3 进行赋值操作,如果key不存在则会创建,否则为覆盖,value的值可以是任意数据类型
del d[42] 删除指定元素 d.clear()回收全部
3.2 List --Python中使用最频繁的数据类型--与Java中的ArrayList类似
定义: li=["a", "b", "mpilgrim", "z", "example"]
访问: 使用索引访问 li[0],也可以使用负索引进行访问
分片访问: li[1:3:1] 最多可以包含3个. 分别为 起始index,到底的index(不包含),步数
添加元素: 使用append insert extend(list)等方法
搜索元素: index---返回索引
in ---返回boolean,判断元素是否在list中
删除元素:remove,移除一个
pop,移除最后一个元素,并返回该元素
支持的运算符: +,+=,*, 对于大型List,extend的执行速度要快一些,但 + 是返回一个新结果,并
不修改原结果
Python的True--由于2.2.1版本前没有Boolean类型,注意首字母大写 True False
0为false; 其它所有数值皆为 true。
空串 ("") 为 为 false; 其它所有字符串皆为 true。
空 list ([]) 为 为 false; 其它所有皆为 true。
空 tuple (()) 为 为 false; 其它所有 皆为 true。
空 dictionary ({}) 为 为 false; 其它所有皆为 true。
Tuple 元组,不可变的list,速度更快一些
定义: t = ("a", "b", "mpilgrim") // 注意单元素时: (1,) ,逗号是必须的
访问: 使用索引访问,也可以使用切片(分片)访问
元组可以作为Dict的key使用
可以使用list()和tuple(),进行tuple和list的相互类型转换
3.4: 变量的定义
不需要声明类型,和其他语言一样,有全局和局部变量之分,可以使用\(续行符)分割多行,用于
给一个变量赋值,引用未初始化的变量将会抛出错误: 注意 在使用[] {} 等符号内时不需要\
可以使用 = 进行一对多,多对多的赋值
如 a,v,c=1,3,4
a=1,2,3 //将结果保存成一个元组tuple
可以使用内置range()生成连续的数字List,和切片一样的结果,默认从0开始,到指定位置-1
3.5 格式化字符串---类似C中sprintf的应用
格式如: "%s=%s" % (k, v)
3.6 映射List---链表推导式
如 li = [1, 9, 8, 4]
[elem*2 for elem in li]
根据一个链表,生成一个新的链表,不仅在list上使用,在字典使用时
[k for k, v in params.items()]
常用的内置函数 dir type str
type用于返回对象的类型
str 用于将对象转换成字符串
dir 用于输出函数返回任意对象的属性和方法列表
内置函数均保存在__buildin__ 模块中,默认加载
可以使用内置的getattr(object,str)方法,使用字符串得到指定对象的方法,然后进行调用
如:
li=[1,3,5]
d=getattr(li, 'append')
d(9)
print li
注意返回的是一个method对象,需要使用()进行调用,也可以传入参数
同样getattr也可以作用与模块,调用指定的方法
getattr常见的使用模式是作为一个分发者,调用方法名类型的方法
def output(data, format="text"):
output_function = getattr(statsout, "output_%s" % format) (2)
return output_function(data)
注意进行传入参数的有效值判断,防止异常的出现,也可以传入第三个参数,作为默认值进行返回
output_function = getattr(statsout, "output_%s" % format, statsout.output_text)
4.5 过滤列表---通过链表推导式中加入条件
[mapping-expression for element in source-list if filter-expression]
li = ["a", "mpilgrim", "foo", "b", "c", "b", "d", "d"]
[elem for elem in li if len(elem) > 1]
4.6 and和or的使用 ----类似Java中的 &&和||
因为Python中的boolean的特殊性,使用and 和 or时,会根据不同情况,将True的对象返回,
而不是直接返回一个boolean对象
4.7 使用lambda表达式,用于快速定义单行的最小函数(来源Lisp)
如: g = lambda x: x*2
g(3) //进行调用
也可以通过 (lambda x: x*2)(3) 进行调用
使用__doc__属性,可以获取指定对象内的docstring
5.2 使用 from module import--类似Java 5中的static 导入,将指定的模块方法导入到当前
模块的命名空间内,可以直接调用
注意防止命名冲突,尽量少用 from module import *
5.3 类的定义
class Loaf:
pass
使用__init__作为构造函数,不是必须创建.使用类名(..)中表示继承,支持多继承
每个类方法都第一个参数,都是指向类当前实例的引用self, //self不是必须的名称,只是约定
类的实例化,相比Java,就少了一个new 关键字
与Java类型,变量超出作用域后,将会被自动回收
Python的方法 不存在重载,__init__也是唯一的
可以通过对__getattr__和__setattr__,监听对class实例的值进行修改: 只对动态值有效,classs
中定义的值无效
其他的内置方法
__cmp__ class实例在==比较的时候被调用
Python中的专有方法,不许需要用户直接调用,格式如__getitem__
私有方法,只使用两个__开头为约定,外部将无法进行调用
以上更多的是习惯问题,而不是强迫的
6.1 异常处理
Python使用try..except..finally...else 等组合进行捕获异常处理,使用raise抛出异常
Java使用try..catch..finally 捕获异常,使用throw抛出异常
else将会在没有异常抛出的情况下运行,except可以同时捕获多个异常,raise也可以抛出异常同时,传递
自定义信息
6.2文件对象操作
使用open()打开文件,可以接收三个参数:文件名、模式和缓冲区,同时返回一个对象
同时注意进行close(),保证资源的回收,以及使用try...except进行异常的捕获
close()方法,并不会抛出异常
模式: w 表示写入文件,不存在则创建,存在就覆盖
r 读取文件
a 将内容添加到文件尾
其他 还有w+ 等...
可以使用 for k,v in d.items(): 遍历dict的元素,注意dict是无序的
module导入一次后,将会被缓存,下次下载将会很快
os模块提供与系统平台相关的操作
sys模块提供与Python环境相关的操作
glob模块提供文件的模糊搜索功能 //如:glob.glob('D:/download/*.rar')
Chapter 7 正则表达式---主要使用re 模块
需要import后才可以使用
常用方法 sub,findall,patten.search(str).group()等
例子一:
s='ad13adjl4jljl13h4g5j1jj13'
de=re.findall('\d+', s, re.MULTILINE)
print type(de),len(de),de
例子二:
s='dada'
c=re.compile('(.{1})')
print c.search(s).groups() //注意()的使用
可以使用r'...'关闭转义要求,patten就是普通的字符串str, 模式也可以使用str直接表示,不过使用
re module的常量会更合适一些
使用re.compile(r'...') 可以创建指定正则的实例,关键在于增加了需要方法
其他:使用正则情况下,最后加上docstring或者#注释,提高可读性,本书介绍正则的篇幅还是很多的
Chapter 8 HTML处理
读取网页内容的方法,使用urllib模块 //还有个urllib2,使用上一样,具体区别未知
import urllib
sock = urllib.urlopen('http://www.baidu.com')
htmlsource=sock.read()
sock.close()
print htmlsource.decode('GB2312') //注意进行转码
Python 2.6也提供了一些HTML的内置工具module,本书基于2.3,所以未见介绍.
Python中的变量: locals局部, globals全局
基于dict的字符串格式化, 也就在%()s 中加入(key)
params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}
"%(pwd)s" % params
使用内置函数locals(),获取dict当前作用域中的局部变量
def d():
k=1
b=2
print locals()
>>> {'k': 1, 'b': 2}
注意locals 存在性能问题,因为他创建了局部命名空间的一份拷贝
Chapter 9 . XML处理
与Java类似,同样拥有Sax和Dom两个模块用于处理xml,本书主要介绍DOM模块
Python可以选择从模块中导入函数,类或指定包内的所有模块,注意导入的命名空间,嵌套的对象
依旧需要使用模块名进行引用
对于包的直接导入内容,可以在__init__.py文件中进行设置,该文件也是每个包下必须拥有的,默认
情况下文件内容可以为空
可以使用xml.dom 下的minidom进行简单的dom解析
from xml.dom import minidom
xmi=minidom.parseString("<roots><root id='33'>orz</root></roots>")
print xmi.toxml()
使用 childNodes 属性获取所有节点的集合,链表对象,使用firstChild可以访问子集的元素,注意
文本内容也是一个单独的节点
注意在xml中避免换行,空格等符号,否则也会被解析成一个节点
只有text节点(文本内容),提供data属性
可以使用#coding:utf-8 设置py文件的编码--可以用于直接使用中文
继续XML解析: 使用getElementsByTagName方法搜索元素,将返回所以符合条件的Element对象列表
c=xmi.getElementsByTagName('root')
print c[0].attributes['id'].value //使用name 可以访问key..不过'id'就是key
小节: 介绍的还是比较混乱...
Chapter 10 : 脚本和流
解析来自URL的xml
usock = urllib.urlopen('http://slashdot.org/slashdot.rdf') (1)
xmldoc = minidom.parse(usock) //同时也可以直接传入xml文件进行解析
usock.close() //注意关闭
parseString() //用于解析字符串
StringIO模块,可以将一个字符串模拟成文件对象---提供read..seek方法
ssock = StringIO.StringIO('str')
同样,需要使用close()进行关闭
修改sys.stdout 可以将print的内容进行重定向,比如传入到一个文件中,
fsock = open('out.log', 'w')
sys.stdout = fsock
print...
sys.stderr 用于错误信息的重定向
也可以见到的使用print >> file 进行相同操作,不过只会提供一次的重定向.
处理命令行参数---用于在控制台,运行脚本情况下,获取附带的参数
sys.argv,用于获取参数的列表
getopt模块..需要再自己补充下
Chapter 11. HTTP Web服务
使用httplib 模块,提供更多的HTTP连接过程的操作,需要与urllib配合使用
设置 httplib.HTTPConnection.debuglevel = 1 后,urllib的连接过程将会自动打印出HTTP信息
urllib2提供了更多对于HTTP的操作能力
连接的方式
request=urllib2.Request('http://www.baidu.com')
opener = urllib2.build_opener()
d=opener.open(request).read()
主要操作request对象,进行http信息的修改
request.add_header('User-Agent', 'OpenAnything/1.0 +http://diveintopython.org/')
通过request的add_header方法,可以往请求中添加任意的内容
使用d.headers.dict 获取opener open之后的请求信息
常见HTTP状态码: 200 正常, 404 未找到 302 重定向 304内容未修改
可以添加 request.add_header('Accept-encoding', 'gzip') 允许向服务器请求压缩后的数据
可以使用StringIO与GZip模块进行解压缩
compressedstream = StringIO.StringIO(compresseddata) //compresseddata为read的压缩后的内容
gzipper = gzip.GzipFile(fileobj=compressedstream)
data = gzipper.read()
注意一定需要使用StringIO
SOAP 服务跳过..需要使用第三方类库,也许已经太久.
Chapter 13 单元测试
使用unittest模块进行测试,与Java类似,需要继承unittest模块中的TestCase类,同时方法
名定义为testmethodname. 使用self对象的方法进行测试...类似java的assertEqual方法
unittest.main() //执行测试,所有测试类中以test开头的方法都会执行
如:
class UUTest(unittest.TestCase):
def testmethod(self):
self.assertEqual(1,2)
unittest.main()
建议通过继承Exception自定义异常,同样建议继承Object实现自定义异常
正则使用时,可以通过参数添加单行的内联注释,可以同时添加多行
re.compile("\d #注释",re.VERBOSE)
单元测试的基本概念
1:测试用例的设计方针是目的单一,可以自动运行,互不干扰.
2:在被测试代码编写之前编写测试用例
3:编写测试有效输入的测试用例,并检查正确的结果
4:编写测试无效输入的测试用例,并检查正确的失败
5:为描述BUG或反映新需求而编写和升级测试用例
6:为改进性能,可伸缩性,可读性,可维护性和任何缺少的特性而无情的重构.
默认使用普通模式的运行测试,可以使用详细(verbose)模式运行,得到更多的输出
unittest.main(argv = unittest.sys.argv + ['--verbose'])
数据中心思想...看的不是太懂,可能关注在数据之上,而不是对数据的操作习惯.
动态导入模块
import时,可以使用,同时导入多个模块
动态模块也可以达到同样的效果
sys = __import__('sys') //以内置函数的形式导入module,参数为字符串
可以配合map和filter等内置函数,批量导入模块
moduleNames = ['sys', 'os', 're', 'unittest']
modules = map(__import__, moduleNames)
map函数中,把列表中的元素依次调用指定的函数
filter更多用于过滤,并返回符合条件的结果
filter和map的第二个参数可以为列表,元组以及定义了__getitem__特殊方法的自定义类
生成器--使用yield生成的类似function对象
def getY():
while 1:
yield 1
counter = getY()
counter.next()
也可以使用for循环得到类似的结果
def getY():
for i in range(10):
yield i
Chapter 18: 性能优化
要防止过早的优化: 比如在代码编写完成之前
使用timeit模块计时,使用重复测试中的最小值作为最终结果..具体例子介绍的并不详细,例子
没有写成功..
如果需要在正则和编写循环之间进行选择,选择正则,因为正则是用c写的,python的循环需要通过
python解释器运行.
如果正则和字符串方法进行选择,选择字符串方法,都是以C编译的,所以选取简单的
使用静态的搜索方法 如:string.maketrans 会比普通的字典查找更快
最后一点:不要太迷恋性能优化.
本书对例子的介绍比较多,并不适合初学者阅读.
...
2.5 代码缩进,与Java不同,没有固定的{}表示代码块,Python使用缩进表示块的开始,取消缩进表示块的结束
一般使用4个空格表示,并不一定需要4个,只要一致即可
Python 使用硬回车来分割语句,冒号和缩进代码块。
2.6 模块测试: 主要指用于辨认当前模块的类型(注: 模块也是对象),使用内置的__name__属性,通常是模块的
文件名,不带扩展名,如果当前模块是被直接运行的,那将会使用特殊的默认名__main__
使用 if __name__ == "__main__":
Chapter 3 内置数据类型
3.1: Dictionary(dict) 字典--键值对,类似Java中的Hashtable的实现
定义: d = {"server":"mpilgrim", "database":"master"}
访问: d["server"]
操作: 直接d["server"]=3 进行赋值操作,如果key不存在则会创建,否则为覆盖,value的值可以是任意数据类型
del d[42] 删除指定元素 d.clear()回收全部
3.2 List --Python中使用最频繁的数据类型--与Java中的ArrayList类似
定义: li=["a", "b", "mpilgrim", "z", "example"]
访问: 使用索引访问 li[0],也可以使用负索引进行访问
分片访问: li[1:3:1] 最多可以包含3个. 分别为 起始index,到底的index(不包含),步数
添加元素: 使用append insert extend(list)等方法
搜索元素: index---返回索引
in ---返回boolean,判断元素是否在list中
删除元素:remove,移除一个
pop,移除最后一个元素,并返回该元素
支持的运算符: +,+=,*, 对于大型List,extend的执行速度要快一些,但 + 是返回一个新结果,并
不修改原结果
Python的True--由于2.2.1版本前没有Boolean类型,注意首字母大写 True False
0为false; 其它所有数值皆为 true。
空串 ("") 为 为 false; 其它所有字符串皆为 true。
空 list ([]) 为 为 false; 其它所有皆为 true。
空 tuple (()) 为 为 false; 其它所有 皆为 true。
空 dictionary ({}) 为 为 false; 其它所有皆为 true。
Tuple 元组,不可变的list,速度更快一些
定义: t = ("a", "b", "mpilgrim") // 注意单元素时: (1,) ,逗号是必须的
访问: 使用索引访问,也可以使用切片(分片)访问
元组可以作为Dict的key使用
可以使用list()和tuple(),进行tuple和list的相互类型转换
3.4: 变量的定义
不需要声明类型,和其他语言一样,有全局和局部变量之分,可以使用\(续行符)分割多行,用于
给一个变量赋值,引用未初始化的变量将会抛出错误: 注意 在使用[] {} 等符号内时不需要\
可以使用 = 进行一对多,多对多的赋值
如 a,v,c=1,3,4
a=1,2,3 //将结果保存成一个元组tuple
可以使用内置range()生成连续的数字List,和切片一样的结果,默认从0开始,到指定位置-1
3.5 格式化字符串---类似C中sprintf的应用
格式如: "%s=%s" % (k, v)
3.6 映射List---链表推导式
如 li = [1, 9, 8, 4]
[elem*2 for elem in li]
根据一个链表,生成一个新的链表,不仅在list上使用,在字典使用时
[k for k, v in params.items()]
常用的内置函数 dir type str
type用于返回对象的类型
str 用于将对象转换成字符串
dir 用于输出函数返回任意对象的属性和方法列表
内置函数均保存在__buildin__ 模块中,默认加载
可以使用内置的getattr(object,str)方法,使用字符串得到指定对象的方法,然后进行调用
如:
li=[1,3,5]
d=getattr(li, 'append')
d(9)
print li
注意返回的是一个method对象,需要使用()进行调用,也可以传入参数
同样getattr也可以作用与模块,调用指定的方法
getattr常见的使用模式是作为一个分发者,调用方法名类型的方法
def output(data, format="text"):
output_function = getattr(statsout, "output_%s" % format) (2)
return output_function(data)
注意进行传入参数的有效值判断,防止异常的出现,也可以传入第三个参数,作为默认值进行返回
output_function = getattr(statsout, "output_%s" % format, statsout.output_text)
4.5 过滤列表---通过链表推导式中加入条件
[mapping-expression for element in source-list if filter-expression]
li = ["a", "mpilgrim", "foo", "b", "c", "b", "d", "d"]
[elem for elem in li if len(elem) > 1]
4.6 and和or的使用 ----类似Java中的 &&和||
因为Python中的boolean的特殊性,使用and 和 or时,会根据不同情况,将True的对象返回,
而不是直接返回一个boolean对象
4.7 使用lambda表达式,用于快速定义单行的最小函数(来源Lisp)
如: g = lambda x: x*2
g(3) //进行调用
也可以通过 (lambda x: x*2)(3) 进行调用
使用__doc__属性,可以获取指定对象内的docstring
5.2 使用 from module import--类似Java 5中的static 导入,将指定的模块方法导入到当前
模块的命名空间内,可以直接调用
注意防止命名冲突,尽量少用 from module import *
5.3 类的定义
class Loaf:
pass
使用__init__作为构造函数,不是必须创建.使用类名(..)中表示继承,支持多继承
每个类方法都第一个参数,都是指向类当前实例的引用self, //self不是必须的名称,只是约定
类的实例化,相比Java,就少了一个new 关键字
与Java类型,变量超出作用域后,将会被自动回收
Python的方法 不存在重载,__init__也是唯一的
可以通过对__getattr__和__setattr__,监听对class实例的值进行修改: 只对动态值有效,classs
中定义的值无效
其他的内置方法
__cmp__ class实例在==比较的时候被调用
Python中的专有方法,不许需要用户直接调用,格式如__getitem__
私有方法,只使用两个__开头为约定,外部将无法进行调用
以上更多的是习惯问题,而不是强迫的
6.1 异常处理
Python使用try..except..finally...else 等组合进行捕获异常处理,使用raise抛出异常
Java使用try..catch..finally 捕获异常,使用throw抛出异常
else将会在没有异常抛出的情况下运行,except可以同时捕获多个异常,raise也可以抛出异常同时,传递
自定义信息
6.2文件对象操作
使用open()打开文件,可以接收三个参数:文件名、模式和缓冲区,同时返回一个对象
同时注意进行close(),保证资源的回收,以及使用try...except进行异常的捕获
close()方法,并不会抛出异常
模式: w 表示写入文件,不存在则创建,存在就覆盖
r 读取文件
a 将内容添加到文件尾
其他 还有w+ 等...
可以使用 for k,v in d.items(): 遍历dict的元素,注意dict是无序的
module导入一次后,将会被缓存,下次下载将会很快
os模块提供与系统平台相关的操作
sys模块提供与Python环境相关的操作
glob模块提供文件的模糊搜索功能 //如:glob.glob('D:/download/*.rar')
Chapter 7 正则表达式---主要使用re 模块
需要import后才可以使用
常用方法 sub,findall,patten.search(str).group()等
例子一:
s='ad13adjl4jljl13h4g5j1jj13'
de=re.findall('\d+', s, re.MULTILINE)
print type(de),len(de),de
例子二:
s='dada'
c=re.compile('(.{1})')
print c.search(s).groups() //注意()的使用
可以使用r'...'关闭转义要求,patten就是普通的字符串str, 模式也可以使用str直接表示,不过使用
re module的常量会更合适一些
使用re.compile(r'...') 可以创建指定正则的实例,关键在于增加了需要方法
其他:使用正则情况下,最后加上docstring或者#注释,提高可读性,本书介绍正则的篇幅还是很多的
Chapter 8 HTML处理
读取网页内容的方法,使用urllib模块 //还有个urllib2,使用上一样,具体区别未知
import urllib
sock = urllib.urlopen('http://www.baidu.com')
htmlsource=sock.read()
sock.close()
print htmlsource.decode('GB2312') //注意进行转码
Python 2.6也提供了一些HTML的内置工具module,本书基于2.3,所以未见介绍.
Python中的变量: locals局部, globals全局
基于dict的字符串格式化, 也就在%()s 中加入(key)
params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}
"%(pwd)s" % params
使用内置函数locals(),获取dict当前作用域中的局部变量
def d():
k=1
b=2
print locals()
>>> {'k': 1, 'b': 2}
注意locals 存在性能问题,因为他创建了局部命名空间的一份拷贝
Chapter 9 . XML处理
与Java类似,同样拥有Sax和Dom两个模块用于处理xml,本书主要介绍DOM模块
Python可以选择从模块中导入函数,类或指定包内的所有模块,注意导入的命名空间,嵌套的对象
依旧需要使用模块名进行引用
对于包的直接导入内容,可以在__init__.py文件中进行设置,该文件也是每个包下必须拥有的,默认
情况下文件内容可以为空
可以使用xml.dom 下的minidom进行简单的dom解析
from xml.dom import minidom
xmi=minidom.parseString("<roots><root id='33'>orz</root></roots>")
print xmi.toxml()
使用 childNodes 属性获取所有节点的集合,链表对象,使用firstChild可以访问子集的元素,注意
文本内容也是一个单独的节点
注意在xml中避免换行,空格等符号,否则也会被解析成一个节点
只有text节点(文本内容),提供data属性
可以使用#coding:utf-8 设置py文件的编码--可以用于直接使用中文
继续XML解析: 使用getElementsByTagName方法搜索元素,将返回所以符合条件的Element对象列表
c=xmi.getElementsByTagName('root')
print c[0].attributes['id'].value //使用name 可以访问key..不过'id'就是key
小节: 介绍的还是比较混乱...
Chapter 10 : 脚本和流
解析来自URL的xml
usock = urllib.urlopen('http://slashdot.org/slashdot.rdf') (1)
xmldoc = minidom.parse(usock) //同时也可以直接传入xml文件进行解析
usock.close() //注意关闭
parseString() //用于解析字符串
StringIO模块,可以将一个字符串模拟成文件对象---提供read..seek方法
ssock = StringIO.StringIO('str')
同样,需要使用close()进行关闭
修改sys.stdout 可以将print的内容进行重定向,比如传入到一个文件中,
fsock = open('out.log', 'w')
sys.stdout = fsock
print...
sys.stderr 用于错误信息的重定向
也可以见到的使用print >> file 进行相同操作,不过只会提供一次的重定向.
处理命令行参数---用于在控制台,运行脚本情况下,获取附带的参数
sys.argv,用于获取参数的列表
getopt模块..需要再自己补充下
Chapter 11. HTTP Web服务
使用httplib 模块,提供更多的HTTP连接过程的操作,需要与urllib配合使用
设置 httplib.HTTPConnection.debuglevel = 1 后,urllib的连接过程将会自动打印出HTTP信息
urllib2提供了更多对于HTTP的操作能力
连接的方式
request=urllib2.Request('http://www.baidu.com')
opener = urllib2.build_opener()
d=opener.open(request).read()
主要操作request对象,进行http信息的修改
request.add_header('User-Agent', 'OpenAnything/1.0 +http://diveintopython.org/')
通过request的add_header方法,可以往请求中添加任意的内容
使用d.headers.dict 获取opener open之后的请求信息
常见HTTP状态码: 200 正常, 404 未找到 302 重定向 304内容未修改
可以添加 request.add_header('Accept-encoding', 'gzip') 允许向服务器请求压缩后的数据
可以使用StringIO与GZip模块进行解压缩
compressedstream = StringIO.StringIO(compresseddata) //compresseddata为read的压缩后的内容
gzipper = gzip.GzipFile(fileobj=compressedstream)
data = gzipper.read()
注意一定需要使用StringIO
SOAP 服务跳过..需要使用第三方类库,也许已经太久.
Chapter 13 单元测试
使用unittest模块进行测试,与Java类似,需要继承unittest模块中的TestCase类,同时方法
名定义为testmethodname. 使用self对象的方法进行测试...类似java的assertEqual方法
unittest.main() //执行测试,所有测试类中以test开头的方法都会执行
如:
class UUTest(unittest.TestCase):
def testmethod(self):
self.assertEqual(1,2)
unittest.main()
建议通过继承Exception自定义异常,同样建议继承Object实现自定义异常
正则使用时,可以通过参数添加单行的内联注释,可以同时添加多行
re.compile("\d #注释",re.VERBOSE)
单元测试的基本概念
1:测试用例的设计方针是目的单一,可以自动运行,互不干扰.
2:在被测试代码编写之前编写测试用例
3:编写测试有效输入的测试用例,并检查正确的结果
4:编写测试无效输入的测试用例,并检查正确的失败
5:为描述BUG或反映新需求而编写和升级测试用例
6:为改进性能,可伸缩性,可读性,可维护性和任何缺少的特性而无情的重构.
默认使用普通模式的运行测试,可以使用详细(verbose)模式运行,得到更多的输出
unittest.main(argv = unittest.sys.argv + ['--verbose'])
数据中心思想...看的不是太懂,可能关注在数据之上,而不是对数据的操作习惯.
动态导入模块
import时,可以使用,同时导入多个模块
动态模块也可以达到同样的效果
sys = __import__('sys') //以内置函数的形式导入module,参数为字符串
可以配合map和filter等内置函数,批量导入模块
moduleNames = ['sys', 'os', 're', 'unittest']
modules = map(__import__, moduleNames)
map函数中,把列表中的元素依次调用指定的函数
filter更多用于过滤,并返回符合条件的结果
filter和map的第二个参数可以为列表,元组以及定义了__getitem__特殊方法的自定义类
生成器--使用yield生成的类似function对象
def getY():
while 1:
yield 1
counter = getY()
counter.next()
也可以使用for循环得到类似的结果
def getY():
for i in range(10):
yield i
Chapter 18: 性能优化
要防止过早的优化: 比如在代码编写完成之前
使用timeit模块计时,使用重复测试中的最小值作为最终结果..具体例子介绍的并不详细,例子
没有写成功..
如果需要在正则和编写循环之间进行选择,选择正则,因为正则是用c写的,python的循环需要通过
python解释器运行.
如果正则和字符串方法进行选择,选择字符串方法,都是以C编译的,所以选取简单的
使用静态的搜索方法 如:string.maketrans 会比普通的字典查找更快
最后一点:不要太迷恋性能优化.
本书对例子的介绍比较多,并不适合初学者阅读.
发表评论
-
Learning.Python.3rd.Edition 笔记[27-29]
2009-08-04 17:16 1050Chapter 27 Exception Basics 本书 ... -
Learning.Python.3rd.Edition 笔记[22-26]章节
2009-08-03 15:05 1129Chapter 22 OOP: The Big Picture ... -
Learning.Python.3rd.Edition 笔记 21章节
2009-07-30 10:55 1228Chapter 18 Modules: The Big Pic ... -
Learning.Python.3rd.Edition 笔记[14:17]
2009-07-28 18:41 1213Chapter 15 Function Basics 函数基 ... -
Learning.Python.3rd.Edition 笔记[9:14]
2009-07-24 17:17 1262第三部分 Statements and Syn ... -
Learning.Python.3rd.Edition 笔记[7:8]
2009-07-22 19:29 1470Chapter 8 Lists and Dictionarie ... -
Learning.Python.3rd.Edition 笔记[5:7]
2009-07-22 11:42 1489The Dynamic Typing Interlude a ... -
Learning.Python.3rd.Edition 笔记[4]
2009-07-21 11:28 1295第四章中很大概的介绍了下Python的core 数据类型,后续 ... -
Learning.Python.3rd.Edition 笔记 [0:4]
2009-07-20 17:05 1515前三章介绍Python的历史, ... -
简明 Python 笔记
2009-07-16 19:56 1874版本较旧 2.34,可能有已被修改的 数值类型: 在Pyt ... -
Python Totorial入门指南 笔记 [9:]
2009-07-16 13:42 1031实现自定义class的迭代 ... -
Python Totorial入门指南 笔记 [5:9]
2009-07-15 19:44 1046使用关键字import导入模 ... -
Python Totorial入门指南 笔记 :5
2009-07-14 19:55 1033在Window xp上,需要在环境 ...
相关推荐
《Dive Into Python》是一本广受欢迎的Python编程教程,专为已经具备其他编程语言经验的开发者设计。这本书通过实践的方式引导读者深入理解Python的各个方面,不仅覆盖了基础语法,还涉及到了高级特性。以下是我对书...
《Dive into Python》是一本面向已有编程经验的开发者学习Python语言的书籍。该书的笔记主要涵盖了Python的基础语法和核心概念,包括函数定义、模块的使用、数据结构如字典、列表和元组等。 在Python中,函数定义以...
2. "Dive Into Python中文版.rar":这是Python经典教程"Dive Into Python"的中文版。原版书籍由Mark Pilgrim编写,深入浅出地介绍了Python语言,适合有一定编程基础的学习者使用,中文版使得国内读者能更方便地理解...
dive-into-machine-learning, 使用 python Jupyter笔记本和scikit学习深入机器学习 ! 深入机器学习 本指南是给你的: ! 你对机器学习的 。 你知道。( 至少是基本的basics ! 如果你想了解更多的python,请尝试使用...
4. **Dive Into Python**: `diveintopythonzh-cn.pdf` 是《Dive Into Python》的中文版,这是一本经典的Python入门书籍,它通过实际的代码示例来讲解Python的各种概念,适合实践性学习者。 5. **Python核心编程**: ...
最后,`Python_Tutorial_25cn.pdf`和`Dive.Into.Python-zh-cn-5.4-with-code.chm`是两本深入的Python教程,其中`Dive.Into.Python-zh-cn`是知名书籍"Dive Into Python"的中文版,它以实际代码示例为驱动,深入讲解了...
Python中文资料大集合 都郁闷死... 简单介绍一下哈: python入门,python程序员指南,python2.5官方指南,简明python教程,python学习笔记,python教学文件,Dive.Into.Python-zh-cn-5.4-with-code.chm<br>等等~~~
4. **Dive.Into.Python-zh-cn-5.4-with-code.chm**:《深入Python》的中文版,这本书通过实践案例来教授Python,是学习Python的好资源。 5. **OReilly - Python Standard Library.chm**:专门讲解Python标准库的...
Dive Into Python.chm python-2.7.2.chm Python Programming on Win32 .chm Python核心编程.pdf Python精要参考.pdf Python学习笔记整理.chm 简明python教程.chm wxpython-2.8.7.1-api.chm wxpython-in-action-zh....
NoteCase 又叫 Outliner(大纲),它是一个按照树状结构来组织文档内容的笔记管理程序,...譬如我现在正在认真阅读 《DIVE INTO PYTHON》,我可以利用 NoteCase 树状文档组织结构,将我所阅读的章节分别建立相应结点。
Dive into CPython internals, trying to illustrate every detail of CPython implementation | CPython 源码阅读笔记, 多图展示底层实现细节
【标题】:“Python笔记(1)关于我们应不应该继续学习Python” 【描述】:这篇文章讲述了作者在面试过程中遇到的问题,即被问及对Linux的熟悉程度。作者承认自己在大学时期对Linux了解甚少,但在工作中逐渐意识到...
CPython 源码阅读笔记, 多图展示底层实现细节 Dive into CPython internals, trying to illustrate every detail of CPython implementation
Learn-Dive-into-DL-PyTorch │ ├── Code │ │ ├── CNN │ │ ├── GAN │ │ ├── Language-Model │ │ ├── Lecture1-Linear-model │ │ ├── Lecture2-Softmax │ │ ...
此外,"dive-into-machine-learning-master"这个压缩包文件名暗示了教程的结构,可能包含一系列按章节组织的Notebook文件,每个文件对应一个主题或概念,你可以逐个探索并完成其中的代码练习。 总的来说,这门教程...
3. 修改Python源代码,添加`sys.path.append("..")`这一行,使得Python能够找到`d2lzh_pytorch`包的位置。 在解决了`d2lzh_pytorch`的导入问题后,你可能会遇到另一个问题,即`torchtext`模块未被安装。`torchtext`...
- This project reproduces the book Dive Into Deep Learning - 记录Learning from data一书中的习题解答 - 《统计学习方法》的代码实现 - 北邮《Python编程与实践》课程资料 - 北京邮电大学“网络搜索原理”课程...
在“Dive-into-Deep-Learning-master”这个压缩包中,可能包含了一个完整的深入学习教程项目。这个项目可能涵盖了以下知识点: 1. **深度学习基础**:介绍神经网络的基本结构,包括输入层、隐藏层和输出层,以及...