首先来看赋值,浅拷贝,深拷贝. 一赋值: a=['word',2,3] b=a print id(a),id(b) print [id(x) for x in a] print [id(x) for x in b] a[0]='hello' print a print b E:\python2.7.11\python.exe E:/py_prj/fluent_python/chapter8.py 24709080 24709080 [24410496, 21298404, 21298392] […
1/30 第八章Python异常处理结构与程序调试 异常处理 try-except结构 try: try块 except Exception: except块 try-except-else结构 try: try块 except Exception: except块 else: #如果都没捕获到 else块 带有多个except的try结构 try: try块 except Exception: except块 except Exception2: except块 else: #如果都没捕获到…
字典的变种: OrderedDict 首先来看下面的代码,在一个字典中,有name,age,city,在遍历这个字典的时候.顺序却是随机的,不是按照我们添加的顺序也就是name->age->city. d={} d['name']='zhf' d['age']=33 d['city']='chengdu' for k,v in d.items():     print k,v city chengdu age 33 name zhf 我们如果想字典按照我们添加的顺序呈现出来,就必须用到Orde…
第二章开始介绍了列表这种数据结构,这个在python是经常用到的结构 列表的推导,将一个字符串编程一个列表,有下面的2种方法.其中第二种方法更简洁.可读性也比第一种要好 str='abc' string=[] for s in str:     print string.append(s) ret=[s for s in str] print ret 用这种for-in的方法来推导列表,有个好处就是不会有变量泄露也就是越界的问题.这在c语言中是需要特别注意的问题. 对于两个以上的列表推导作者用到…
这一章中作者简要的介绍了python数据模型,主要是python的一些特殊方法.比如__len__, __getitem__. 并用一个纸牌的程序来讲解了这些方法 首先介绍下Tuple和nametuple的区别: Nametuple是类似于元组的数据类型.除了能够用索引来访问数据,还支持用方便的属性名来访问数据. 传统的元组访问如下.对每个元素的访问都必须通过索引来找到.这种找法很不直观 tup1=('abc','def','ghi') print tup1[1] 使用nametuple来构造:…
在python中一切都可以视作为对象,包括函数.我们来看个例子: def function_try():     '''it is funciton try doc'''     print 'function_try' if __name__=="__main__":     print function_try.__doc__     print function_try.__name__ E:\python2.7.11\python.exe E:/py_prj/fluent_py…
装饰器就如名字一样,对某样事物进行装饰过后然后返回一个新的事物.就好比一个毛坯房,经过装修后,变成了精装房,但是房子还是同样的房子,但是模样变了. 我们首先来看一个函数.加入我要求出函数的运行时间.一般来说代码写成如下.但是我有很多个函数都要计算运行时间.每个函数里面都要写一个计时的过程是一件很麻烦的事. def target():     start=time.time()     print 'running target()'     end=time.time()     print e…
什么是闭包 其实,闭包指延伸了作用域的函数,其中包含函数定义体中引用.但是不在定义体中定义的非全局变量.函数是不是匿名的没有关系,关键是它能访问定义体之外定义的非全局变量. 示例 7-8 average_oo.py:计算移动平均值的类 class Averager(): def __init__(self): self.series = [] def __call__(self, new_value): self.series.append(new_value) total = sum(self…
首先来看下对象的表现形式: class People():     def __init__(self,name,age):         self.name=name         self.age=age if __name__== "__main__":     p=People('zhf','30')     print p E:\python2.7.11\python.exe E:/py_prj/fluent_python/chapter9.py <__main__…
在前面第十章以及第一章的时候介绍了Vector对象的运算符重载.第十三章专门介绍运算符重载.这里我们看几个之前没讲过的运算符__neg__,__pos__,__invert__ class Vector(object):     def __init__(self,x):         self.x=x     def __neg__(self):         return "Vector(%d)" % (-self.x)     def __str__(self):      …