博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python装饰器
阅读量:2226 次
发布时间:2019-05-09

本文共 862 字,大约阅读时间需要 2 分钟。

python 中的多态性是基于对象的行为的。在其它语言中,比如c++中对象被要求属于某个类或者实现接口。但是在python中需要的是遵守给定的几个规则。比如,想写一个序列,那么只需要遵循序列的规则。

静态方法和类成员方法
静态方法和类成员方法在创建时分别被装入staticmethod类型和classmethod类型的对象。
静态方法没有self参数,并且能够被类本身调用。
类成员方法用cls参数取代self参数,且可以被类的对象调用,值得注意的是,cls是绑定到类的。

Python学习笔记(九) - ajstar - ajstar的博客

 下面是调用的结果:

Python学习笔记(九) - ajstar - ajstar的博客

 当然在python2.4后有了装饰器(decorator)。是用@操作符在函数或者方法上方列出装饰器,装饰器可以试一个也可以是多个,多个装饰器在应用时的顺序与指定的顺序相反。

于是,上面的定义就可以改成下面这样:

Python学习笔记(九) - ajstar - ajstar的博客

 迭代器

所谓的迭代器就是具有next方法(无参数)的对象
实现__iter__方法的对象
在调用next方法时,迭代器会返回下一个值。如果next方法被调用但是迭代器没有值可以返回,那么会引发一个StopInteration异常。在Python3中又有了新的变化。

Python学习笔记(九) - ajstar - ajstar的博客

 这个斐波拉契数列,注意,它实现了__iter__方法,它返回迭代器本身。

一个实现了__iter__方法的对象是可迭代的,一个实现了next方法的对象是一个迭代器。

Python学习笔记(九) - ajstar - ajstar的博客

迭代器的厉害之处还在于可以从它得到列表,从而避免了传递一个很大的列表,这样节约了内存,并且使程序变得更通用简洁优雅。

把上面的斐波拉契函数稍加改动:

Python学习笔记(九) - ajstar - ajstar的博客

 当斐波拉契数大于1000时,就不再做了。我们可以用list得到这时的列表:

Python学习笔记(九) - ajstar - ajstar的博客
 
可以对一个方法应用多个装饰方法:
@A
@B
@C
def f ():
#等价于下面的形式,Python会按照应用次序依次调用装饰方法(最近的先调用)
def f():
f = A(B(C(f)))
装饰方法解析:

转载于:https://www.cnblogs.com/SophiaTang/archive/2011/10/01/2197046.html

你可能感兴趣的文章
TensorFlow-7-TensorBoard Embedding可视化
查看>>
轻松看懂机器学习十大常用算法
查看>>
一个框架解决几乎所有机器学习问题
查看>>
特征工程怎么做
查看>>
机器学习算法应用中常用技巧-1
查看>>
决策树的python实现
查看>>
了解 Sklearn 的数据集
查看>>
如何选择优化器 optimizer
查看>>
一文了解强化学习
查看>>
CART 分类与回归树
查看>>
seq2seq 的 keras 实现
查看>>
seq2seq 入门
查看>>
什么是 Dropout
查看>>
用 LSTM 做时间序列预测的一个小例子
查看>>
用 LSTM 来做一个分类小问题
查看>>
详解 LSTM
查看>>
按时间轴简述九大卷积神经网络
查看>>
详解循环神经网络(Recurrent Neural Network)
查看>>
为什么要用交叉验证
查看>>
用学习曲线 learning curve 来判别过拟合问题
查看>>