在进行深度学习的时候,我们常常希望能够多线程去处理数据,以便于提高程序的处理速度,于是给大家介绍诸多python的大杀器,能够很快的提高代码能力以及程序的处理速度。
Round1:
__getitem__:可以让类对象实现迭代功能,即拥有和tuple、list一样的可以用for...in...来迭代该对象。
class Animal:
def __init__(self, animal_list):
self.animals_name = animal_list
#def __getitem__(self,idx):
#print(idx)
#return self.animals_name[idx]
animals = Animal(["dog","cat","fish"])
for animal in animals:
print(animal)
出现了错误:该类对象不是迭代对象,而我们将使用__getitem__的时候,重写python大杀器,最后可以得到理想的输出。
Round2:
__del__:该方法与__init__方法一致,当初始化类对象的时候响应__init__,那么相反,当不需要该对象的时候可以使用__del__来进行内存回收,将对象所占有的内存空间释放。Python 采用自动引用计数(ARC)方式来回收对象所占用的空间,当程序中有一个变量引用该 Python 对象时,Python 会自动保证该对象引用计数为 1;当程序中有两个变量引用该 Python 对象时,Python 会自动保证该对象引用计数为 2,依此类推,如果一个对象的引用计数变成了 0,则说明程序中不再有变量引用该对象,表明程序不再需要该对象,因此 Python 就会回收该对象。
class Item:
def __init__ (self, name, price):
self.name = name
self.price = price
# 定义析构函数
def __del__ (self):
print('del删除对象')
# 创建一个Item对象,将之赋给im变量
im = Item('name', 29.8)
x = im # ①
# 打印im所引用的Item对象
del im
print('--------------')
当1⃣️未注销的时候,im与x皆为item的对象,删除im,还有item对象,因此并没有回收,当将其注销后,删除im,才表示python中未有item对象,即删除成功。
Round3:
__iter__迭代器,python中的类是通过__iter__函数(属性)来实现将对象可迭代化,但是__iter__只是一个生成迭代器的对象(自己理解),而我们需要一个函数去做迭代,这时候,不可避免的就想到了__next__()方法,很多时候迭代器可以完成的工作,列表及数组都可以完成,而使用迭代器会使我们减少内存的使用。迭代器是一个对象(有next方法)而生成器却是一个函数,reversed() 内建函数将返回一个反序访问的迭代器. enumerate() 内建函数同样也返回迭代器.
Round4:
__call__当我们定义实现__call__函数的时候,这个类型就相当于可调用的,我们把这个类型的对象当作函数来使用,方便又好用。