七、字典
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!=0sys.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+yapply
foo(3,'abc')等同apply(foo,(3,'abc')) 类似函数还有filter map reduce在自定义函数里,依然可以使用在函数外运行的函数,因为python没有main函数,所以在执行语句中定义的函数都是全局函数。
a1=1 def foo():print a1 结果为1。 注意如果先定义了变量,那么在后写的自定义函数里不能修改全局变量,比如这个a1 如果是后定义了变量,那么在先写的自定义函数里,这就是2个值了,想通用需要用global来声明一下。 但是注意在class里,这样定义的变量就没有用处了,需要用global来声明一下。