python的dist-packages目录和site-packages目录的区别
- sudo apt-get install 安装的package存放在 /usr/lib/python2.7/dist-packages目录中
- pip 或者 easy_install安装的package存放在/usr/local/lib/python2.7/dist-packages目录中
- 手动从源代码安装的package存放在site-packages目录中
=============
def __len__(self): 只要正确实现了__len__()方法,就可以用len()函数“长度”:
class TST(object): def __init__(self,names): self.names=names def __len__(self): return len(self.names) aa=TST('sdf') print(len(aa))
def __iter__(self):
只要实现了__iter__的对象就是可迭代对象(Iterable)
同时实现了__iter__和__next__的是迭代器(Iterator),当然也是一个可迭代对象了
__next__应该在迭代完成后,抛出一个StopIteration异常
for语句会自动处理这个StopIteration异常以便结束for循环
class Squares(object): def __init__(self, start, stop): self.value=start-1 self.stop=stop def __iter__(self): return self #因为自己实现了__next__方法,所以可以返回self def __next__(self): if self.value==self.stop: raise StopIteration self.value+=1 return self.value**2 x=Squares(1,5) print([n for n in x]) # #[1, 4, 9, 16, 25] print([n for n in x]) #同一个对象只能迭代一次[]
#要达到多个迭代器的效果,__iter__只需返回实现了__next__的对象,而不是返回self
class mynext(object): def __init__(self,start,stop): self.value=start-1 self.stop=stop def __next__(self): if self.value==self.stop: raise StopIteration self.value+=1 return self.value**2 class Squares2(object): def __init__(self, start, stop): self.value=start-1 self.stop=stop def __iter__(self): return mynext(self.value,self.stop) x=Squares2(1,5) print([n for n in x]) # [1, 4, 9, 16, 25] print([n for n in x]) #同一个对象可以被迭代多次 [1, 4, 9, 16, 25]
=================
def __setitem__(self,k,v) #将对象当作字典操作,设置键值对时会触发该方法
def __getitem__(self,k)#将对象当作字典操作,根据键获取值时会触发该方法
def __delitem__(self,k)#将对象当作字典操作,删除指定的键值对时自动触发