装饰器(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. Macbook上Windows的触摸板设置工具

    Macbook上用Boot Camp装了双系统后,没了触摸板的三指拖拽功能,滚动(scroll)也太过灵敏,装Boot Camp官方驱动也没用. 装了Trackpad++这个第三方驱动,就能完美实现M ...

  2. 一种480 MHz无线数传模块的设计

    一种480 MHz无线数传模块的设计 来源:电子技术应用2012年第6期 作者:严 冬,黄 聃,王 平,彭 杰,朱柏寒2012/8/13 16:56:32 关键词: 微处理器|微控制器 物联网 RF  ...

  3. 在GOOGLE浏览器中模拟移动浏览器 调试Web app

    在此记录下,以便在今后的工作中用到. 首先通过F12 or Ctrl+Shift+i,打开开发者工具,点击开发者工具面板的 (show  drawer)按钮,出现如下图所示的面板: 切换至Emulat ...

  4. HTTP与HTTPS异同/HTTP1.0与HTTP1.1差别

    HTTP状态码 分类 解释 描述 1XX 信息 服务器收到请求,需要请求者继续执行操作 2XX 成功 操作被成功接收并处理 3XX 重定向 需要进一步的操作以完成请求 4XX 客户端错误 请求包含语法 ...

  5. Risk UVA - 12264 拆点法+最大流+二分 最少流量的节点流量尽量多。

    /** 题目:Risk UVA - 12264 链接:https://vjudge.net/problem/UVA-12264 题意:给n个点的无权无向图(n<=100),每个点有一个非负数ai ...

  6. jquery 改变checkbox的值

    似乎没什么用... <script> $(document).ready(function(){ $("#comment").change(function(){ va ...

  7. 一个stream!=NULL 的问题 fclose.c 47

    运行一段时间会出现如下错误提示:Debug Assertion Failed!Program:...File:fseek.cline:100Expression: (stream!=NULL) 点Re ...

  8. canvas图片base64编码后,ajax提交到后台

    如题,直接上JS var imgData = canvas.toDataURL("image/png"); var data = imgData.substr(22); $.pos ...

  9. windows server 服务器添加免费域名证书的方法(Let's Encrypt)

    在 windows server 服务器上可以通过 win-acme工具添加ssl 1.首先下载工具 https://github.com/PKISharp/win-acme/releases 最新版 ...

  10. Java深入理解文章(转载)

    引用自:http://droidyue.com/ninki/ JVM运行时的数据区 http://droidyue.com/blog/2014/12/21/java-runtime-data-area ...