七、字典

python的字典是长度可变的哈希表。
  has_key查询是否有这个key值。
  添加只要给一个新键赋值就可以了。
  删除一个用del,全部删除用clear
  改变或添加新元素可以用update
  get通过key值来返回键值,如果没有这个key,则返回空(python用None表示空)
  get还有第二个参数,设置没有key时的返回值。不过如果使用setdefault设置过后,get的第二个参数就无效了。
  items用list装载表列tuple的结构返回内容。
  keys以列表list返回key值
  values以列表list返回键值

一个key只能对应一个键值

遍历dict可以用for i in dict1:print i,dict1[i]

---------------------------------------------------

八、语句

没啥特殊的,就是while,for多了个else,供正常循环结束后使用,break出来的不行。
  没有switch case语句了。
  for 某个变量 in 列表

range(start=0,end)
  range(start,end,slep=1)
  生出一个从start到end-1(或从0到end-1)的列表,slep表示值与值之间的间隔。
  xrange()是专门在for循环里使用的,适合建立比较大的列表。

break和continue和c语言里没有什么区别
  pass和VC的NULL一样,在你不知道干什么的时候做空语句用。
  均不加括号。

---------------------------------------------------

九、文件

open(文件名,打开方式,缓冲区)
  打开方式有r,w,a,+,其中b已经没有用处了,因为linux都是二进制的文件类型。
  缓冲区从0到某个值,如果是-1则使用系统缺省。
  read读取设置的字节数,默认为-1,到文件结束。
  readline读当前行。文件指针跳到下一行。
  readlines按行读取到列表。
  flush把缓冲的内容写入到文件。

write写文件
  writelines把列表写如文件,注意默认不加换行符,需要自己添加。如:
  >>>output=['1','2','3']
  >>>[x+'\n' for x in output]
  ['1\012','2\012','3\012']

seek改变文件指针。
  0 SEEK_SET 文件头
  1 SEEK_CUR 当前位置
  2 SEEK_END 文件尾

tell获得当前文件位置
  close关闭文件
  next同readline,不过到文件尾后继续next会出错,而readline会读取空。
  truncate截断文件

文件结束的标志是读出的数据=="",注意空行为'\n'则不是空,只有到结尾才是空。

文件还有几个参数可以使用,注意没有括号,是属性不是方法。
closed//是不是已经被关闭
mode//最近一次的打开模式
name//完整路径和文件名

raw_input('Enter:')
  等同
  sys,stdout.write('Enter:')
  sys.stdin.readline()

sys.argv是命令行参数的列表。
  没有argc,可以使用len来获取。argv[0]为文件的完整路径和文件名。

os模块提供对文件的操作。具体还是查询帮助文件吧。P199

pickle和shelve这2个模块可以通过dump(),load()直接把文件类型,比如一个类直接保存在文件里,然后下次读出来。试验了一下挺好用的,C程序虽然可以把结构体或者是类往文件里写,但这个竟然还可以直接把类的定义写进去。

fileinput模块遍历多个输入文件的全部数据行。
  getopt模块提供对命令行参数的分析和处理。
  glob和fnmatch模块提供unix风格的通配符匹配功能。
  gzip和zlib模块和zipfile允许在访问文件时加上自动进行的压缩和解压功能。
  shutil模块提供高级文件访问功能,复制文件的访问权限,递归的复制目录树等。
  c和StringIO模块在字符串对象顶部实现了文件风格的操作接口。
  tempfile模块生成临时文件名或临时文件。

---------------------------------------------------

十、异常



  try-except……except-else与try-finally不能通用。
  try-finally无论是否异常,都会执行。

except可以加多个异常,如:except (aError,bError):
  except还可以再带一个参数,是例外发生时给与的一些信息,可能是很多类型,需要判断,如:except(aError,bError),argument: 使用时,可以str(argument)进行获得。

try: except: else: 如果使用except:即捕获所有异常,则没有异常发生时,else会执行。

raise可以自己引发一个异常
  raise[Exception[,args[,traceback]]]
  Exception可以是一个字符串一个类或一个实例。
  args表示可选参数,提示给用户看。
  traceback帮助用户重新引发一个相同的异常,平时不用。
  raise '111'那么异常内容就是'111',可以用except '111':捕捉到。

assert满足条件就引发异常
  assert expression[,arguments]
  比如:
  try:
   assert 1==0,'1!=0'
  except AssertionError,args:
   print '%s:%s'%(args.__class__.__name__,args)
  执行结果
  AssertionError:1!=0

sys.exc_info()可以获得异常内容。

---------------------------------------------------

十一、函数

可变长参数:正式参数要在前面,用*来表示可变个数的参数。
  比如: def foo2(arg1,arg2,*theRest):
  在函数里使用他们时,后面的可变个数参数被当作一个list来使用,for i in theRest:。
  调用函数时,可以foo2(1,2,11,12,13,14) ,后面4个参数被放入theRest这个list中。
  如果用**,则可以作为字典来传递,如:def foo3(arg1,arg2,**theRest):
  在函数里使用他们时,作为一个字典来使用for i in theRest.key():
  调用函数时,可以foo3(1,2,c='grail',d=123)
  注意这里c、d的位置只能放字符串,而且不能加引号,否则提示错误。
  其实也可以传递*() 和**{}来作为参数。

函数不支持多态,后面定义的同名函数会让前面定义的无效。

lambda创造匿名函数。
  lambda [arg1,arg2] :expression
  def foo1():return 1 等同 lambda :1
  比如foo2=lambda:1 则foo2和foo1功能相同。
  比如求和函数,就是lambda x,y:x+y

apply
  foo(3,'abc')等同apply(foo,(3,'abc'))
  类似函数还有filter map reduce

在自定义函数里,依然可以使用在函数外运行的函数,因为python没有main函数,所以在执行语句中定义的函数都是全局函数。
  a1=1
  def foo():print a1 结果为1。
  注意如果先定义了变量,那么在后写的自定义函数里不能修改全局变量,比如这个a1
  如果是后定义了变量,那么在先写的自定义函数里,这就是2个值了,想通用需要用global来声明一下。
  但是注意在class里,这样定义的变量就没有用处了,需要用global来声明一下。