装饰器(decorator): @staticmethod @classmethod 都既可以使用类名访问,也可以使用对象名访问, 但classmethod在定义时需要cls参数

生成器(generator): 任何包含yield语句的函数称为生成器。

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

for item in Fibs():  next()方法和__iter__()方法缺一不可;__iter__()仅调用一次, next()调用多次(有多少个元素就调用多少次)

decorator & generator是针对方法而言的,iterator是针对类(对象)而言的。

#!/usr/bin/python3
#coding:utf-8
#如果想有中文注释就必须得有上面的语句 #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():
def __init__(self):
self.a = 1
self.b = 1 #Python2&Python3:如果没有next(), 有__iter__()提示如下错误
#TypeError: iter() returned non-iterator of type 'Fibs'
#def next(self): #python2
def __next__(self): #python3
print("in next()")
self.a, self.b = self.b, self.a + self.b
return self.a #Python2&Python3:如果没有__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.")

Output:

(py361scrapy133) lxw@lxw(::)~$ python3 generator_iterator.py
Start to count from Done! <class 'type'>
<class '__main__.Fibs'>
in __iter__()
in next()
in next()
in next()
in next()
in next()
in next()
in next()
in next()
in next()
in next()
in next()
in next()
in next()
in next()
in next()
in next()

References:

python3:迭代器

decorator & generator & iterator的更多相关文章

  1. 基于 Generator 和 Iterator 的惰性列表

    初识 Lazy List 如果有了解过 Haskell 的朋友,对下面的这些表达一定不陌生 repeat 1 -- => [1, 1, 1, 1, 1,...] cycle "abc& ...

  2. JVM&NIO&HashMap简单问

    JVM&NIO&HashMap简单问 背景:前几天在网上看到关于JVM&NIO&HashMap的一些连环炮的面试题,整理下以备不时之需. 一.JVM Java的虚拟机的 ...

  3. generator生成器iterator遍历器和yield

    generator方法()返回一个iterator 使用generator时永远先去调用generator()方法 for of对iterator的调用过程(babel参照) 1,_iterator. ...

  4. Python 生成器 (generator) & 迭代器 (iterator)

    python 生成器 & 迭代器 生成器 (generator) 列表生成式 列表生成式用来生成一个列表,虽然写的是表达式,但是储存的是计算出来的结果,因此生成的列表受到内存大小的限制 示例: ...

  5. ES 6 proimse &&iterator &&Generator函数 &&async

    1.proimse 异步调用function getData(){ let promise =new Promise((resolve,reject)); let xmlHttp =new XMLHt ...

  6. python generator iterator和iterable object

    1 iterable object list.dict.set.tuple.file(在每行上iterate)等都是iterable object,但是它们不是iterator.但是它们可以转换成it ...

  7. Iterator与Generator

    Iterator Iterator 概念 Iterator 提供了一种统一的接口机制,为各种不同数据结构提供统一的访问机制.定义 Iterator 就是提供一个具有 next() 方法的对象,每次调用 ...

  8. Python的程序结构[7] -> 生成器/Generator -> 生成器浅析

    生成器 / Generator 目录 关于生成器 生成器与迭代器 生成器的建立 通过迭代生成器获取值 生成器的 close 方法 生成器的 send 方法 生成器的 throw 方法 空生成器的检测方 ...

  9. Gist - ES6 Iterator

    Introduction Iterator is one of the most common design modes in daily development. Let's explore the ...

随机推荐

  1. HTML中让表单input等文本框为只读不可编辑但可以获取value值的方法;让文本域前面的内容显示在左上角,居中

      HTML中让表单input等文本框为只读不可编辑的方法 有时候,我们希望表单中的文本框是只读的,让用户不能修改其中的信息,如使input text的内容,中国两个字不可以修改   有时候,我们希望 ...

  2. windows 短文件名/短路径名规则

    How Windows Generates 8.3 File Names from Long File Names Windows generates short file names from lo ...

  3. hdu6076 Security Check 分类dp 思维

    /** 题目:hdu6076 Security Check 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6076 题意:有两个队列在排队,每一次警察可以检 ...

  4. Java与.NET机制比较分析

    一.概述 不管是什么语言开发的web应用程序,都是在解决一个问题,那就是用户输入url怎么把对应的页面响应出来,如何通过url映射到响应的类,由于自己做asp.net的时间也不短了,还算是对asp.n ...

  5. android 学习之rxjava

    最近在做的一个项目,所用到的技术和rxjava有关,因此还特地的学习了下,在这简单的介绍下rxjava: RxJava是什么 RxJava 在 GitHub 主页上的自我介绍是 "a lib ...

  6. 说出几个与spring同类型的开源框架,说出几个与hibernate同类型的开源框架,说出几个与struts同类型的开源框架

    说出几个与spring同类型的开源框架,说出几个与hibernate同类型的开源框架,说出几个与struts同类型的开源框架 解答: 1)与spring同类型的开源框架:JUIDE.EJB3.0.pi ...

  7. CocosCreate 与 Netty 开发斗地主 (一步一步开发)

    CocosCreate 与  Netty 开发斗地主 开发此教程的目的是为了教会大家基本的使用Netty,通过一个小例子来教会大家制作斗地主游戏服务器,采用WebSocket方式! 目前正在制作阶段, ...

  8. SR领域文献资源汇总(链接地址)

    DRCN http://www.drcn.org/   The International Workshop on Design of Reliable Communication Networks ...

  9. boost实用工具:assign库了解学习

    许多时候,我们需要为容器初始化或者赋值,填入大量的数据; STL容器仅提供了容纳这些数据的方法,但是填充的步骤是相当地麻烦(insert.push_back); 于是,boost::assign出现了 ...

  10. Python 个人常用汇总

    Python 常用文件操作总结: 导入库路径:sys.path.append('/usr/local/lib/python2.7/site-packages') from random import ...