python语法速读
python表达式操作符及程序
lambda args:expression
x if y else z
x or y
x and y
not x
x<y,x<=y,x>y,x>=y,x==y,x!=y,x is y,x is not y,x in y,not in y
x|y
x^y
x&y
x<<y,x>>y
-x+y,x-y
x*y,x%y,x/y,x//y
-x,+x,~x,x**y
x[i],x[i,j],x.attr
x(...)
(...,...) 元组
[...,...] 列表
{:,:,...}字典
'...'字符串
decimal 模块中的Decimal的构造函数创建一个小数对象,并传入一个字符串,就我们希望在结果中显示的小数位数
类型属于对象,而不是变量
一个对象都有2个标准的头部信息:1,类型标志符去标识对象的类型;2,一个引用计算器(gc悲剧了)
python通过保持用每个对象中的计数器记录引用指到这个对象上的次数来完成这一功能.如果计数器为零,这个对象的内存会自动回收
内存copy
import copy 标准库中的copy模块有一个通用的拷贝任意对象类型的调用,也有一个拷贝嵌套对象结构(例如:嵌套了列表的一个字典)的调用
import copy
x=copy.copy(y) #make a top-level "shallow"copy of any object y
x=copy.deepcopy(y) #make a deep copy of any objecty: copy all nested parts
python 缓存并复用了小的整数和小的字符串 (和java类似)
测试相等 引用相等 == 同一性相等 is
如何知道引用计数具体数字
import sys
>>> x ="fafafdafadfa"
>>> sys.getrefcount(x)
2
常见字符串常量和表达式
s3=r'/temp/spam' #raw字符串
s4=u'spam'
s1+s2
s2*3 #合并,重复
s2[i]
s2[i:j]
len(s2) #索引,分片,求长度
s2.find('a')
s2.rstrip()
s2.replace('a','s')
s1.split(',')
s1.isdigit() # 字符串方法调用:搜索,移除空格,替换,用展位符分隔,内容测试,短信息转换等
s1.lower()
for x in s2 #迭代,成员关系
抑制字符串转义
r'c:/new'
'c://new'
类型转换
int("42")
str(42)
字符串格式化
>>> print "fadfa %s" % (1)
fadfa 1
字符串方法调用
s.capitalize()
ljust(width)
center(width)
lower()
count(sub[,start[,end]])
lstrip()
encode([encoding[,errors]])
replace(old,new[,maxsplit])
endswith(suffix[,start[,end]])
rfind(sub[,start[,end]])
expandtabs([tabsize])
rindex(sub[,start[,end]])
find(sub[,start[,end]])
rjust(width)
index(sub[,start[,end]])
rstrip()
isalnum()
split([sep[,maxsplit]])
isalpha()
splitlines([keepends])
isdigit()
startswith(prefix[,start[,end]])
islower()
strip()
isspace()
swapcase()
istitle()
title()
isupper()
translate(table[,delchars])
join(seq)
upper()
常用列表常量和操作
for x in l2 #迭代,成员关系
l2.append #方法:增长,排序,搜索,插入,反转等等
ls.extend([5,6])
l2.sort()
l2.index(1)
l2.insert(i,x)
l2.reverse()
del l2[k] #裁剪
del l2[i:j]
l2.pop()
l2.remove(2)
l2[i1=1
range(4) #生成整列表/元组
l4=[x**2 for x in range(5)] #列表解析
最常用的列表方法是append ,将一个单项(对象引用)加到列表末尾.与合并不同的是,append加一个对象而不是列表,与+不同,它在原地修改,而不是产生新的列表
字典 的基本操作
>>> d={"r":1,"o":2}
>>> d.get("r")
1
>>> d["r"]
1
d.has_key("key")
d.keys()
del d["key"]
d["key"]=newvalue
避免missing-key错误
d.get("errkey","defaultvalue")
赋值语句中要注意的东西
>>> a=1
>>> b=2
>>> a,b=b,a
>>> a,b
(2, 1)
a=b="spam"
c=b.replace("s","S111",1)
print "result: ",a,b,c
a=b=1
b +=1
print "number:",a,b
a=b=[]
a.append("w")
print a,b
python没有++,--操作
python的保留字
and,as,assert,break,class,continue,def,del,
elif,else,except,exec,finally,for,from,global,
if,import,in,is,lambda,not,or,
pass,print,raise,return,try,while,with,yield
l=l.append(4)
print l
none
重定向输出流
import sys
sys.stdout=open("log.txt","a")
print x,y
print >> file扩展
for line in open('dfadfa.txt').readlines():
print line.upper()
>>> D={'A':1,'B':2}
>>> for key in D:
... print key,D[key]
...
A 1
B 2
lambda
funcs=[lambda x:x**2,lambda x:x**3]
global声明了一个模块级的变量并赋值
def 语句是实时执行的 可以根据判断定义不同的同名函数
内置作用域 import __builtin__
global ,不是一个类型或大小的声明,它是一个命名空间的声明.它告诉python函数打算生成n个全局(命名空间)的变量名
匿名函数lambda
lambda arg1,arg2,...argn : expression using args
lambda 是一个表达式,而不是一个语句,因此lambda能够出现在python语法不允许def出现的地方 lambda的主题是一个单个的表达式,而不是一个代码块
def func(x,y,z)
return x+y+z
f=lambda x,y,z : x+y+z
l=[(lambda x:x**2),(lambda x:x**3),(lambda x:x**4)]
>>> def action(x):
... return(lambda y:x**y)
>>> act=action(2)
>>> act
<function <lambda> at 0x36fdb0>
>>> act(3)
8
在序列中映射函数:map
>>> def inc(x):return x+10
...
>>> counters=[1,2,3,4]
>>> map(inc,counters)
[11, 12, 13, 14]
>>> def mymap(func
,seq):
... res=[]
... for x in seq:res.append(func
(x))
... return res
...
>>> mymap(inc,[1,2,3])
[11, 12, 13]
函数式编程工具:filter 和reduce
>>> filter((lambda x:x>0),range(-5,5))
[1, 2, 3, 4]
>>>
函数是头等公民,所以map,filter,reduce的第一个参数是函数
>>> reduce((lambda x,y:x+y),[1,2,3,4])
10
>>> reduce((lambda x,y:x*y),[1,2,3,4])
24
---python学习手册(learning python) 第3版