[小知识]Python迭代器相关 @ Python

class Fib(object):
    def __init__(self):
        self.a, self.b = 0, 1 # 初始化两个计数器a,b

    def __iter__(self):
        return self # 实例本身就是迭代对象,故返回自己

    def next(self):
        self.a, self.b = self.b, self.a + self.b # 计算下一个值
        if self.a > 100000: # 退出循环的条件
            raise StopIteration();
        return self.a # 返回下一个值

实现一个迭代器,必须包含__iter__和next这两个方法。可以有两种方法来使用这个class。

一,当做一个for循环来使用:

>>> for n in Fib():
...     print n
...
1
1
2
3
5
...
46368
75025

二,调用next方法。

f = Fib()
for i in range(10):
    print f.next()

打印结果得:

1
1
2
3
5
8
13
21
34
55

再来一个例子:

class A(object):

    def __init__(self, o):
        self.__obj__ = o

    def __getattr__(self, name):
        if hasattr(self.__obj__, name):
            return getattr(self.__obj__, name)
        return self.__dict__[name]

    def __iter__(self):
        return self.__obj__.__iter__()

l = []
a = A(l)

for i in xrange(101): a.append(i)

print sum(a)
时间: 2024-11-08 23:54:55

[小知识]Python迭代器相关 @ Python的相关文章

Python小知识点儿

2020/01/30 Python小知识点儿 ?1.python逻辑运算符 and or not 其中not使用的两个场景: ①在开发中,通常希望某个条件不满足时,执行一些代码,可以使用 not ②另外,如果需要拼接复杂的逻辑计算条件,同样也有可能使用到 not ?2. age=2 print("你%d岁了"%age) 输出结果: 你2岁了 ?3. ?4. ?5.随机数 ?6. ?7. 未完待续... Python小知识点儿 原文地址:https://www.cnblogs.com/L

Django 2.0.7 使用小知识

Django 2.0.3 使用小知识 运行环境: Python 3.6.4 Django 2.0.7 Django Admin中model显示为中文 定义model时,定义一个Meta对象,设置需要显示的中文名称.verbose_name为单数名称,verbose_name_plural为复数名称.因为中文没有区分单数.复数,所以都定义为一样的名称. from django.db import models class Article(models.Model): class Meta: ver

11个小知识帮助你Python快熟入门

随着移动互联网的普及,服务器运维所面临的挑战也随之越来越大.当规模增长到一定程度,手动管理方式已经无法应对,自动化运维成为解决问题的银弹.Python凭借其灵活性,在自动化运维方面已经被广泛使用,能够大大提高运维效率,服务器集群的规模越大,优势越明显.下面一些知识有助于你开始进入Python的世界. 1 Python适用于哪些应用场景? 这个没有固定答案,很多人都说Python不适合开发GUI的程序,但Python自己的IDE--IDEL和第三方的IDE--Eric就是Python写的. 目前看

python为不同的对象如何分配内存的小知识

id方法的返回值就是对象的内存地址. python中会为每个出现的对象分配内存,哪怕他们的值完全相等(注意是相等不是相同).如执行a=2.0,b=2.0这两个语句时会先后为2.0这个Float类型对象分配内存,然后将a与b分别指向这两个对象.所以a与b指向的不是同一对象:>>> a=2.0>>> b=2.0>>> a is bFalse>>> a==bTrue但是为了提高内存利用效率对于一些简单的对象,如一些数值较小的int对象,py

Python基础之小知识要点

1.python注释. python备注分为单行和多行注释,单行注释为#,多行注释为三个单引号或三个双引号. 2.python文件格式及页面编码. 2.1一般通过python IDLE( shell)创建的文件,文件保存时的格式编码为utf-8格式,如果是通过记事本创建的,请记得文件保存时的格式编码要选择为utf-8. 2.2一般.py文件免不了会出现中文,但是为了页面不出现乱码,需要在文件内容头部加上:#coding=utf-8,将代码编码设置为utf-8, 3.python缩行. pytho

Python 迭代器&生成器,装饰器,递归,算法基础:二分查找、二维数组转换,正则表达式,作业:计算器开发

本节大纲 迭代器&生成器 装饰器  基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式,运算后得出结果,结果必须与真实的计算器所得出的结果一致 迭代器&

python文件相关操作

Python文件相关操作 打开文件 打开文件,采用open方法,会将文件的句柄返回,如下: f = open('test_file.txt','r',encoding='utf-8') 在上面的代码中,open()方法进行打开文件等相关操作,open()方法其中第一个参数是要打开的文件的文件路径,第二个参数是对要打开文件要执行的权限,第三个参数是文件采用字符编码. 而open()方法返回的内容叫做文件句柄.我们可以打印返回的文件句柄来看下: f = open('test_file.txt','r

python迭代器、生成器和yield语句

http://blog.csdn.net/pipisorry/article/details/22107553 一.迭代器(iterator) 迭代器:是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末尾是,则会引发StopIteration.任何这类的对象在Python中都可以用for循环或其他遍历工具迭代,迭代工具内部会在每次迭代时调用next方法,并且捕捉StopIteration异常来确定何时离开. 迭代器对象要求支持迭代

python迭代器,生成器,推导式

可迭代对象 字面意思分析:可以重复的迭代的实实在在的东西. list,dict(keys(),values(),items()),tuple,str,set,range, 文件句柄(待定) 专业角度: 内部含有'__iter__'方法的对象,就是可迭代对象. 内置函数:dir() print(dir(str)) 判断一个对象是否是可迭代对象: print('iter' in dir(str)) 优点: 直观. 操作方法较多. 缺点: 占内存. 不能迭代取值(索引,字典的key). 迭代器 字面意