decorator & generator & iterator
2015-07-23 16:39
344 查看
装饰器(decorator): @staticmethod @classmethod 都既可以使用类名访问,也可以使用对象名访问, 但classmethod在定义时需要cls参数
生成器(generator): 任何包含yield语句的函数成为生成器。
迭代器(iterator):一个实现了__iter__()方法的对象是可迭代的,一个实现了next方法的对象是迭代器。
for item in Fibs(): next()方法和__iter__()方法缺一不可;__iter()仅调用一次, next()调用多次(有多少个元素就调用多少次)
decorator & generator是针对方法而言的,iterator是针对类(对象)而言的。
生成器(generator): 任何包含yield语句的函数成为生成器。
迭代器(iterator):一个实现了__iter__()方法的对象是可迭代的,一个实现了next方法的对象是迭代器。
for item in Fibs(): next()方法和__iter__()方法缺一不可;__iter()仅调用一次, next()调用多次(有多少个元素就调用多少次)
decorator & generator是针对方法而言的,iterator是针对类(对象)而言的。
#!/usr/bin/python2.7 #coding:utf-8 #如果想有中文注释就必须得有上面的语句 __metaclass__ = type #generator def countDown(n): print("Start to count from " + str(n)) while n > 0: yield n n -= 1 print("Done!") #iterator #迭代器(iterator):一个实现了__iter__()方法的对象是可迭代的,一个实现了next方法的对象是迭代器。 #for item in Fibs(): next()方法和__iter__()方法缺一不可;__iter__()仅调用一次, next()调用多次(有多少个元素就调用多少次) class Fibs(object): def __init__(self): self.a = 1 self.b = 1 #如果没有next(), 有__iter__()提示如下错误 #TypeError: iter() returned non-iterator of type 'Fibs' def next(self): print("in next()") self.a, self.b = self.b, self.a + self.b return self.a #如果没有__iter__()(不管有没有next())则提示如下错误 #TypeError: 'Fibs' object is not iterable def __iter__(self): print("in __iter__()") return self def main(): for item in countDown(10): print(item) print("") #newline print(type(Fibs)) #<type 'type'> print(type(Fibs())) #<class '__main__.Fibs'> for fib in Fibs(): if fib > 1000: print(fib) break if __name__ == '__main__': main() else: print("Being imported as a module.")
相关文章推荐
- 龙之森林项目进程
- 浅谈android应用性能之内存(转)
- CentOS 6+Hadoop 2.6.0分布式集群安装
- BaseActivity框架搭建
- 解析XML文件的两种方法
- HDU 2026 首字母变大写
- Maven--要点笔记
- MySQL Study之--MySQL schema_information数据库
- 推荐Eclipse插件:Eclipse Color Theme
- linux Centos iptables 8080
- Linux下配置MySQL需要注意的几点
- C#中流,字节,字符,字符串
- #笔记#圣思园 JavaWeb 第53讲——function对象、工厂方式、构造函数方式、原型方式定义对象
- JavaScript中对象深复制
- C++宽字符串转字符串
- 在Ubuntu上安装监控rstatd
- 下载和安装和使用CocoaPods
- 实现的效果:EditText提示文本字体大小和输入文本字体大小不同
- FreeRTOS 特性简介
- Spring实例学习