python杂记 20200207

python的dist-packages目录和site-packages目录的区别

  1. sudo apt-get install 安装的package存放在 /usr/lib/python2.7/dist-packages目录中
  2. pip 或者 easy_install安装的package存放在/usr/local/lib/python2.7/dist-packages目录中
  3. 手动从源代码安装的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)#将对象当作字典操作,删除指定的键值对时自动触发

你可能感兴趣的:(python杂记 20200207)