Python Code snippet
2012-05-23 19:58
281 查看
(1)函数默认参数
deffoo3(i,L=[]):
iflen(L)==0:
L.append(0)
L[0]+=i
returnL[0]
printfoo3(1)
printfoo3(2)
printfoo3(3)
printfoo3(4)
上述代码得到的结果是
1
3
6
10
因此不要用可变对象作为默认参数值(Don’tusemutableasdefaults)
tca,tcb,tcc差异
classtc:
tca=[]
tcb=''
def__init__(self,ff):
self.tcc=[]
(2)Python中set相关操作
python的set是一个无序不重复元素集,基本功能包括关系测试和消除重复元素.
集合对象还支持union(联合),intersection(交),difference(差)和sysmmetricdifference(对称差集)等数学运算.
作为一个无序的集合,set不记录元素位置或者插入点。因此,set不支持indexing,slicing,或其它类序列的操作。
基本操作:
len(s)set的长度
xins测试x是否是s的成员
xnotins测试x是否不是s的成员
s.issubset(t)
s<=t测试是否s中的每一个元素都在t中
s.issuperset(t)
s>=t测试是否t中的每一个元素都在s中
s.union(t)
s|t集合的并
s.intersection(t)
s&t集合的交
s.difference(t)
s-t差集s.symmetric_difference(t)
s^t对称差集s.copy()浅复制s.update(t)
s|=t
s.intersection_update(t)
s&=t
s.difference_update(t)
s-=t
s.symmetric_difference_update(t)
s^=t
s.add(x)
s.remove(x)删除元素x,如果不存在则引发KeyError
s.discard(x)如果存在元素x,则删除
s.pop()删除并返回一个不确定元素,为空则引发KeyError
s.clear()删除所有元素
#说明:非运算符版本的操作支持任何iterable对象,不仅限于set
deffoo3(i,L=[]):
iflen(L)==0:
L.append(0)
L[0]+=i
returnL[0]
printfoo3(1)
printfoo3(2)
printfoo3(3)
printfoo3(4)
上述代码得到的结果是
1
3
6
10
因此不要用可变对象作为默认参数值(Don’tusemutableasdefaults)
classtc:
tca=[]
tcb=''
def__init__(self,ff):
self.tcc=[]
(2)Python中set相关操作
python的set是一个无序不重复元素集,基本功能包括关系测试和消除重复元素.
集合对象还支持union(联合),intersection(交),difference(差)和sysmmetricdifference(对称差集)等数学运算.
作为一个无序的集合,set不记录元素位置或者插入点。因此,set不支持indexing,slicing,或其它类序列的操作。
基本操作:
len(s)set的长度
xins测试x是否是s的成员
xnotins测试x是否不是s的成员
s.issubset(t)
s<=t测试是否s中的每一个元素都在t中
s.issuperset(t)
s>=t测试是否t中的每一个元素都在s中
s.union(t)
s|t集合的并
s.intersection(t)
s&t集合的交
s.difference(t)
s-t差集s.symmetric_difference(t)
s^t对称差集s.copy()浅复制s.update(t)
s|=t
s.intersection_update(t)
s&=t
s.difference_update(t)
s-=t
s.symmetric_difference_update(t)
s^=t
s.add(x)
s.remove(x)删除元素x,如果不存在则引发KeyError
s.discard(x)如果存在元素x,则删除
s.pop()删除并返回一个不确定元素,为空则引发KeyError
s.clear()删除所有元素
#说明:非运算符版本的操作支持任何iterable对象,不仅限于set
(3)列表,元组,字典(List,Tuple,Dictionary)
两个变量的交换:
1 | a,b = b,a |
123 | a = [ 1 , 2 , 3 , 4 , 5 ] >>>a[:: 2 ] #以步长为2的增量迭代整个list对象 [ 1 , 3 , 5 ] |
一个特殊的例子`x[::-1]`用来反转x的实用语法。
12 | >>>a[:: - 1 ] [ 5 , 4 , 3 , 2 , 1 ] |
python有各种各样的容器数据类型,在特定情况下选择python内建的容器如:list和dict。通常更多像如下方式使用:
(4)序列的特殊操作filter,map,reduce,lambda
filter(function,sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple返回:
#返回不能被2和3整除的数
>>>deff(x):returnx%2!=0andx%3!=0
>>>filter(f,range(2,25))
[5,7,11,13,17,19,23]
map(function,sequence):对sequence中的item依次执行function(item),见执行结果组成一个List返回:
>>>defcube(x):returnx*x*x
>>>map(cube,range(1,11))
[1,8,27,64,125,216,343,512,729,1000]
>>>defadd(x,y):returnx+y
>>>map(add,range(8),range(8))
[0,2,4,6,8,10,12,14]
reduce(function,sequence,starting_value):对sequence中的item顺序迭代调用function
>>>defadd(x,y):returnx+y
>>>reduce(add,range(1,11))
55(注:1+2+3+4+5+6+7+8+9+10)
>>>reduce(add,range(1,11),20)
75(注:1+2+3+4+5+6+7+8+9+10+20)
lambda:快速定义单行的最小函数,类似于C语言中的宏
>>>g=lambdax:x*2
>>>g(3)
6
>>>(lambdax:x*2)(3)
6
(5)使用iteritems而不是items
iteriterms使用的是generators,所以当迭代很大的序列是此方法更好
object
|
basestring
/\
strunicode