Django Web开发指南

2015-7-14 20:43:44

P14:'raw'指示符告诉解释器不要转换字符串中的任何特殊字符。。。例如: filename = r'C:\temp\newfolder\robots.txt'。为了保持一致性,不管一个正则表达式是否用到了反斜杠,通常一律都使用raw字符串。

P18:dict.get('key'[,'不存在这个key'])方法比直接使用dict['key']更安全,因为get方法总会返回一个值(默认值为None)。也可以使用setdefault('key','value')方法,它的作用和get一样,而且如果键不存在的话,会使用默认值自动创建键值对,这样后面再调用这个键的话就不会产生错误了。

P23:常见的python异常:

  AssertionError  assert(断言)语句失败

  ArrtibuteError  试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x

  IOError  输入/输出异常,基本上是无法打开文件

  ImportError  无法引入模块或者包;基本上是路径问题

  IndentationError  语法错误;代码没有正确对齐

  IndexError  下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]

  KeyError  试图访问字典里不存在的键

  KeyboardInterrupt  Ctrl+C键被按下

  NameError  使用一个还未被赋予对象的变量

  SyntaxError  Python代码非法,代码不能变异

  TypeError  传入对象类型与要求的不符

  UnboundLocalError  试图访问一个未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它

  ValueError  传入一个调用者不期望的值,即使值的类型是正确的

 P24:httplib模块已经不存在。。。

 

2015-7-15 21:02:00

P39:复制对象和可改变性:不可变对象是传值的,可变对象是传引用的。不可变对象被真正复制,可变对象只是复制了一个对它们的引用,即在内存中只有一份对象,而有两份引用。

>>>mylist = [1, 'a', ['foo', 'bar']]

>>>mylist2 = list(mylist)  #或者 mylist2 = mylist[:]

>>>mylist2[0] = 2

>>>mylist2[2][0] = 'biz'

 

>>>print mylist

[1, 'a', ['biz', 'bar']]

>>print mylist2

[2, 'a', ['biz', 'bar']]

对嵌套列表mylist的修改影响到了mylist2。因为mylist的第三个对象['foo', 'bar']是一个列表,而列表是可变的,所以mylist2得到的只是一份它的引用。

这种类型的复制称之为“浅拷贝(shallow copying)”,因为它只复制了对可变对象的引用而没有尝试获取对象的值。如果确实需要后面的这种行为,即“深拷贝(deep copying)”,必须导入copy模块中的copy.deepcopy。这种类型的拷贝通常是递归的,而且不是所有的对象都是可以深拷贝的。

 

posted @ 2015-07-14 21:25  流殇微  阅读(516)  评论(0编辑  收藏  举报