Python装饰器、生成器、迭代器、魔术方法总结

1、装饰器和上下文管理

2、生成器、迭代器和可迭代对象

总结一:

1、上下文管理器是符合上下文管理协议的对象,主要是定义了__exit__()和__enter__()方法。

装饰器是一个特殊的上下文管理器,两者都是包装其他代码块的工具,区别在于,装饰器包装的是定义的代码块,而上下文管理器可以包装任意的代码块。也就是说装饰器包装的代码是有要求的,也就是一个定义代码块,如定义一个函数。而上下文管理器则没有这种要求,你可以之有一个print都可以。

2、生成器的核心是迭代器,或者说生成器是一种迭代器。因为它可以不用一次返回全部数据,而是调用一次返回一个结果值。

迭代器是定义了__iter__()、__next__()方法的任何对象,定义这个函数的目的是为了能够响应next()函数,因为调用迭代器需要使用next()函数。

可迭代对象是定义了__iter__()方法的任何对象,且__iter__()方法返回的是一个迭代器。

下图展示了可迭代对象:

Python装饰器、生成器、迭代器、魔术方法总结_第1张图片

 

举例说明迭代器和生成器:xrange和range,Python3中应该是没有xrange方法

range()返回的是一个数组,也就是全部的数据,本质上数组是一个可迭代对象,而不是生成器,xrange()返回的是生成器。所以当有大量的数据要变量的时候,xrange的性能要更好一些,但是,Python3中,两者已经没有了却别,xrange就是range,所以在Python3中,range就是一个生成器。

生成器的使用时机是为了在需要获取数据的时候才获取,而不是提前把数据都准备好的时候。

 

 

3、魔术方法

Python中常用的魔术方法有:__new__、__init__、__del__、__len__、

__str__、__unicode__、__bytes__、__int__

而运算符重载函数常用的魔术方法有:

__eq__、__ne__、__lt__、__le__、__gt__、__ge__、__div__

总结二:

1、上述魔术方法基本是Python类的内置方法,其中__new__,是在在创建一个类的实例的时候会调用的方法,__init__在__new__之后调用,用来进行一些定义和初始化之类的操作,__del__是在销毁类对象的时候调用的,可以用来清理资源,其对应与del()函数,del()函数在调用的时候就会调用__del__方法,该方法还会在Python的内存管理机制中,当进行垃圾清理的时候也会调用该方法来是实现销毁对象。

__len__方法对应len()函数,__str__方法对应str()函数,如果定义了一个类Animal,且实例化一个对象之后如:a=Animal()

若:str(a),则会调用__str__方法。同理__unicode__、__bytes__、__int__分别对应函数 unicode()、bytes()、int()。

2、运算符重载对应的方法

__eq__、__ne__对应于判断两个对象相等或不等,即==,<>,!=的重载运算符。

__lt__、__le__、__gt__、__ge__、__div__,分别对应 <、<=、>、>=、/

这些魔术方法可以用在比较两个对象的时候使用。

你可能感兴趣的:(Python,Linux)