decorator & generator & iterator
装饰器(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:
decorator & generator & iterator的更多相关文章
- 基于 Generator 和 Iterator 的惰性列表
初识 Lazy List 如果有了解过 Haskell 的朋友,对下面的这些表达一定不陌生 repeat 1 -- => [1, 1, 1, 1, 1,...] cycle "abc& ...
- JVM&NIO&HashMap简单问
JVM&NIO&HashMap简单问 背景:前几天在网上看到关于JVM&NIO&HashMap的一些连环炮的面试题,整理下以备不时之需. 一.JVM Java的虚拟机的 ...
- generator生成器iterator遍历器和yield
generator方法()返回一个iterator 使用generator时永远先去调用generator()方法 for of对iterator的调用过程(babel参照) 1,_iterator. ...
- Python 生成器 (generator) & 迭代器 (iterator)
python 生成器 & 迭代器 生成器 (generator) 列表生成式 列表生成式用来生成一个列表,虽然写的是表达式,但是储存的是计算出来的结果,因此生成的列表受到内存大小的限制 示例: ...
- ES 6 proimse &&iterator &&Generator函数 &&async
1.proimse 异步调用function getData(){ let promise =new Promise((resolve,reject)); let xmlHttp =new XMLHt ...
- python generator iterator和iterable object
1 iterable object list.dict.set.tuple.file(在每行上iterate)等都是iterable object,但是它们不是iterator.但是它们可以转换成it ...
- Iterator与Generator
Iterator Iterator 概念 Iterator 提供了一种统一的接口机制,为各种不同数据结构提供统一的访问机制.定义 Iterator 就是提供一个具有 next() 方法的对象,每次调用 ...
- Python的程序结构[7] -> 生成器/Generator -> 生成器浅析
生成器 / Generator 目录 关于生成器 生成器与迭代器 生成器的建立 通过迭代生成器获取值 生成器的 close 方法 生成器的 send 方法 生成器的 throw 方法 空生成器的检测方 ...
- Gist - ES6 Iterator
Introduction Iterator is one of the most common design modes in daily development. Let's explore the ...
随机推荐
- (译)Getting Started——1.3.4 Writing a Custom Class(编写自定义的类)
在开发IOS应用中,当你编写自定义的类时,你会发现很多的特殊场合.当你需要把自定义的行为和数据包装在一起时,自定义的类非常有用.在自定义的类中,你可以定义自己的存储.处理和显示数据的方法. 例如,I ...
- UVALive 3942 Remember the Word 字典树+dp
/** 题目:UVALive 3942 Remember the Word 链接:https://vjudge.net/problem/UVALive-3942 题意:给定一个字符串(长度最多3e5) ...
- poj3565 Ants km算法求最小权完美匹配,浮点权值
/** 题目:poj3565 Ants km算法求最小权完美匹配,浮点权值. 链接:http://poj.org/problem?id=3565 题意:给定n个白点的二维坐标,n个黑点的二维坐标. 求 ...
- CSS Transform / Transition / Animation 属性的区别
back21 Jun 2011 Category: tech Tags: css 最近想UI的动画转到css3能吃进3d加速的属性上面来以加强动画的连贯性.只是对于css几个新加的属性不太熟悉,常常容 ...
- (转)java enum枚举
转载自: 原理:http://singleant.iteye.com/blog/686349 应用:http://www.cnblogs.com/happyPawpaw/archive/2013/04 ...
- 拦截asp.net输出流并进行处理的方法
本文实例主要实现对已经生成了HTML的页面做一些输出到客户端之前的处理. 方法的实现原理是:把Response的输出重定向到自定义的容器内,也就是我们的StringBuilder对象里,在HTML所有 ...
- c# 可变数目参数params实例
一般来说,参数个数都是固定的,定义为集群类型的参数可以实现可变数目参数的目的,但是.NET提供了更灵活的机制来实现可变数目参数,这就是使用params修饰符 一般来说,参数个数都是固定的,定义为集群类 ...
- Echoprint系列--编译
近期要做一个音乐相关的client.当中一个功能是音乐识别.搜索了一些资料选择Echoprint来开发.Echoprint是开源免费的,并且多种client都支持能节约非常多时间,今天主要下载和编译源 ...
- InetAddress类和InetSocketAddress的使用
一简介 InetAddress是Java对IP地址的封装,代表互联网协议(IP)地址:InetAddress对象的获取只能通过静态方法,比如根据主机名获取主机的ip地址封装对象: ? 1 InetAd ...
- 使用MAP文件快速定位程序崩溃代码行 (转)
使用MAP文件快速定位程序崩溃代码行 =========================================================== 作者: lzmfeng(http://lz ...