第一章 Python介绍
1.3 基本类型
操作符 +,-,*,/,%,**(幂),divmod(除法)
divmod(10,3)=(3,1)
None表示出错
表示假: None,0,0.0,"",[],(),{} (空)
逻辑运算: and,or
表达式:<cond> and <expr_true> or <expr_false>
cond expr_true expr_false reslut
true true all expr_true
false all all expr_false
true flase all expr_false
1.4 列表list[]
a=[1,2,3] 用[]声明即可
index范围(-len,len-1)
a[-3]=1 a[-2]=2 a[-1]=3 a[0]=1 a[1]=2 a[2]=3
子list,原list的copy,副本:a[1:3]=[2,3],默认0,len或者-1
L.append(var),追加在index为len的位置
L.count(var),计算var出现的次数
len(L),返回长度
L.extend(list),追加list在后面
L.index(var),返回var在L中的index位置,无则抛异常
L.insert(index,var),在index位置插入var,其余元素后退
L.pop(index),删除index元素并返回,没有index则为最后一个元素
L.remove(var),找到var删除,一次只能删一个,无则抛异常
L.reverse(),倒置
L.sort(),顺序排序
模拟栈stack,appen()压栈,pop()出栈
模拟队列queue,insert()入队,pop()出队
模拟树tree,root=[branch1,branch2],branch1=[left,right]....
list comprehension,语法:
[<expr1> for k in L if <expr2>]
例list整数元素加1,原list不变:[ k+1 for k in list type(k)==types.IntType]
1.5 字符串string
float(str) 变成浮点数
int(str,base) 按照base(默认10)进制变成10进制整数
long(str,base) 按照base进制变成长整数
str.capitalize() 首字母大写
str.lower() 变小写
str.ipper() 变大写
str.swapcase() 大小写互换
len(str) 获得长度
str[index:len] 获得子串,同list语法
判断字符
str.isalnum() 范围[A-Za-z0-9]
str.isalpha() 范围[A-Za-z]
str.isdigit() 范围[0-9]
str.islower() 范围[a-z]
str.isupper() 范围[A-Z]
str.istitle() 单词首字母大写
str.isspace() 空白字符,\n,\t,\r,’ ’
str.find(substring,[start [,end]]) 返回substring首次出现位置,无则为-1
str.rfind(substring,[start [,end]]) 同find(),反向查找
str.index(substring,[start [,end]]) 同find(),无则抛异常
str.rindex(substring,[start [,end]]) 同index(),反向查找
str.count(substring,[start [,end]]) 返回substring出现次数,无则为0
%s 字符串 (同print str(obj)打印效果)
%d 有符号十进制整数 %o 无符号八进制 %u 无符号十进制 %x 无符号十六进制(小写)
%e 科学表达式(小写) %E 科学表达式(大写)
%f 浮点数(小数点后6位) %g 浮点数(小于0.0001或者不够精度,科学表示法)
>>> "%f and %f"%(-0.00001,200.0)
’-0.000010 and 200.000000’
>>> "%g and %g"%(-0.00001,2000000.0)
’-1e-05 and 2e+06’
%c ASCII整数表示成字符 %r 表示为字符串(同print expr(obj)打印效果)
str.join(words),words是只含字符的tuple或list,用str作为分隔符将words中的字符串连接起来
str.split(words),words是分隔字符串,将str分解为list
1.6 元组tuple()
常量list,用()表示a=(1,2,3),只有一个元素用(1,)与变量区分
1.8 字典dictionary{}
可通过D[key]得到value
dict(L)可以构造一个dictionary,L是list每个元素都是tuple(key,value)
例: pricelist={"clock":12,"table":100,"xiao":100 }
pricelist=dict([(’clock’,12),("table",100),("xiao",100)])
对不存在的key进行赋值操作,即增加
D.clear() 清空
D.copy() copy,独立的
D.get(key) 返回value,无则为None,D[key]无则抛异常
D.get(key,default) 无则为default
D.has_key(key) 返回true或false
D.items() 得到list
D.keys() 得到全部key,返回list
D.values() 得到全部value,返回list
D.update(E) 从E中得到新数据
D.popitem() 删除
1.9 程序流程
if语句:
if <expr1>:
<statement-block>
elif <expr2>:
<statement-block>
elif <expr3>:
<statement-block>
...
else:
<statement-block>
for循环:
for x in <sequence>:
<statement-block>
else:
<else-block>
>>> a=[1, 2, 3, 4]
>>> for x in a:
... if x==100: break
... else:
... print "100 not found"
...
100 not found
循环未被break中断就执行else语句
while语句同for
1.10 函数def
函数可传递
参数个数可选,可选参数之后的参数都可选,否则报错
参数赋值顺序可通过%d...更改
>>> def printf(format,*arg):
... print format%arg
...
>>> printf ("%d is greater than %d",1,2)
1 is greater than 2
*arg必须是最后一个参数,*表示多个参数,作为一个tuple来传递,通过arg访问
>>> def printf(format,**keyword):
... for k in keyword.keys():
... print "keyword[%s] is %s"%(k,keyword[k])
...
>>> printf("ok",One=1,Two=2,Three=3)
keyword[Three] is 3
keyword[Two] is 2
keyword[One] is 1
用**按照dictionary的方式传递参数
两种方式结合使用:
>>> def testfun(fixed,optional=1,*arg,**keywords):
... print "fixed parameters is ",fixed
... print "optional parameter is ",optional
... print "Arbitrary parameter is ", arg
... print "keywords parameter is ",keywords
...
>>> testfun(1,2,"a","b","c",one=1,two=2,three=3)
fixed parameters is 1
optional parameter is 2
Arbitrary parameter is (’a’, ’b’, ’c’)
keywords parameter is {’three’: 3, ’two’: 2, ’one’: 1}
doc 函数描述 testfun.__doc__
lambda函数可以认为是一种匿名函数
>>> f = lambda a,b: a+b
>>> f(1,2)
3
返回一个lambda函数
>>> def incfun(a):
... return lambda x: x+a
...
>>> incfun(2)(12)
14
global语句修改变量的space,需调用函数之后才生效
嵌套函数,内部函数
函数改变外部参数的值,可更改所调用对象的值,[],{}...
1.11 模块module
可用import module导入
外部可直接访问元素modname.attribute或者函数modname.funname
也能导入后直接访问
>>> from testmodule import age, sayHello
>>> age
0
>>> sayHello
<function sayHello at 0x81631a4>
!!自己写的modname不要和系统一样
package是一组module的集合,解决名称冲突的问题,方便管理
1.12 命名空间name space
概念:name space是从名称(name)到对象(object)上的映射(map),当一个name映射到一个object上时,
我们说这个name和这个object有帮定关系(bind),或者说这个name指向这个object
常用的name space:build-in name space (内在命名空间),global name space (全局命名空间),
local name space(局部命名空间),不同的空间中name是互不关联的
有一个特殊的全局的唯一的 name space,module的 __name__ 是 __main__
每一个module都有一段这样的代码
if __name__ == "__main__":
sayHello() #测试代码
locals()和globals()分别返回global name space 和local name space,用dictionary来表示
LGB规则用scope作用域来解释,代码执行时至少有三个name space,L 指local,G指 global,
B指 buildin(buildin name space)
用del可删除一个name space中的name,指的是删除name和object之间的关系,与指针类似
1.13 类class
obj.__dict__表示obj的name space
>>> class SampleClass:
... def __init__(self):
... print "OK, I was born."
...
>>> a=SampleClass()
OK, I was born.
a就是SampleClass的别名alias,Python中没有构造函数,但是有初始化函数,
object创建后,会自动调用__init__,初始化数据
继承inherit
语法 class <name>(superclass1,superclass2,...):
可以多重继承
__init__(self) 创建
__del__(self) 删除
__repr__(self) 重建,eval(repr(obj)) 得到对象的拷贝
__str__(self) 字符串描述
__cmp__(self,other) 比较,-1 self小于other,0等,1大于
__hash__(self) 得到一个32位的hash值
__nozero__(self) 定义一个对象是否为逻辑假
__len__(self) 返回长度,未定义则报异常
__getitem__(self,key) 返回self[key]来模拟list,dict等结构
__setitem__(self,key,value) 模拟obj[key]=value
__delitem__(self,key) 模拟 del obj[key]
__contains__(self,other) 使object处理in语句
__call__(self,arg1,arg2,...) 像函数一样调用
__add__(self,other) self + other
__sub__(self,other) self - other
__mul__(self,other) self * other
__div__(self,other) self / other
__mod__(self,other) self % other
__divmod__(self,other) divmod(self,other)
__pow__(self,other) self ** other
_pow__(self,other,modulo) pow(self,other,modulo
__lshift__(self,other) self << other
__rshift__(self,other) self >> other
迭代器iterator
>>> s = ’abc’
>>> it = iter(s)
>>> it
<iterator object at 0x00A1DB50>
>>> it.next()
’a’
>>> it.next()
’b’
>>> it.next()
’c’
>>> it.next()
重载__iter__() 以支持迭代器
1.14 异常exception
一:
try :
... # statements 1
except ExceptionType :
... # statements 2
执行statements 1,如果发生exception,就把exception的类型和ExceptionType比较,一致就执行
statements 2,不一致就直接返回,错误向上抛,直到被捕获,如果未被捕获,程序异常终止
try :
... # statements 1
except (ExceptionType1,ExceptionType2) :
... # statements 2
except (ExceptionType3,ExceptionType4) :
... # statements 3
else:
... # statements 4
二:
try:
... # statements 1
finally:
... # statements 2
这种方式不能与第一种混用,无论是否发生exception,或是语句return,statements 2都执行
用于释放资源,同Java finally语句
抛出异常raise
>>> try:
... raise KeyError, "hello"
... except KeyError, arg:
... print arg
...
hello
第三章
3.2 文件操作
f=open("filename","r")
r表示只读,w表示写,rw表示读写,rb读二进制,wb写二进制
>>> f=open("/tmp/x.txt","w")
>>> f.write("a")
>>> f.close()
>>> f=open("/tmp/x.txt","r")
>>> f.read()
’a’
>>> f.read()
’’
打开文件写,写入一个字符,关闭,打开文件只读,读出字符
f.read(size)表示从文件读取size个字符,忽略则读取所有内容,到结尾返回空字符串
从文件中一个字符的读取
f.open("/tmp/x.txt","r")
c=f.read(1)
while c:
print c
c=f.read(1)
f.readline()读取一行,f.readlines() 读取所有,返回list,每个元素表示一行,包括\n
对应的写有writeline,write,writelines
f.write(str)字符串写入到文件中
f.tell() 返回当前读取位置
f.seek(off,where) 定位文件读取位置
f.close()关闭文件
3.3 正则表达式regular expression(regexp)
>>> p=re.compile("abc")
>>> if p.match("abc") : print "match"
...
match
>>>
\用来表示无法打印的部分
为增加可读性,在字符串前面加r来表示raw格式
>>> a=r"\a"
>>> print a
\a
3.4 struct
struct模块处理二进制