使用__iter__ , 和__reversed__ 实现正、反向迭代器

内置的iter(), reversed()函数可以进行正反向迭代,如果需要定制正反向迭代,要怎么做呢?

事实上iter函数是调用的__iter__方法, reversed,则是调用的__reversed__方法,那么只需要

重写这两个方法即可:

这里演示反向输出浮点列表:

#!/usr/bin/env python
#coding:utf-8
#@Author:Andy

# iter() 使用的是__iter__方法
# reversed() 使用的是__reversed__ 方法
# 所以如果要自己实现,只需要重新写该方法即可

# 反向迭代器:

class FloatRange:
	def __init__(self, start, end, step=1.0):
		self.start = start
		self.end = end
		self.step = step

	# 正向
	def __iter__(self):
		t = self.start
		while t < self.end:
			yield t
			t += self.step
	# 反向
	def __reversed__(self):
		t = self.end
		while t > self.start:
			yield t
			t -= self.step

[print(x) for x in reversed(FloatRange(1.0, 5.0, 0.5))]

时间: 2024-12-09 09:03:51

使用__iter__ , 和__reversed__ 实现正、反向迭代器的相关文章

list反向输出 反向迭代器

反向迭代器(rbegin,rend) c.rbegin() 返回一个逆序迭代器,它指向容器c的最后一个元素 c.rend() 返回一个逆序迭代器,它指向容器c的第一个元素前面的位置 每一个容器里面都有Iterator(迭代器),可以从容器的begin位置到end位置,通过++来遍历.同样也有个反向迭代器reverse_iterator,从rbegin(=end-1)到rend(=begin-1)反向遍历,仍然通过++.可见能反向迭代的容器,应该是一个双向链表. 回想一下,所有容器都定义了 beg

反向迭代器

C++ primer (中文版第四版)第273页 9.3.2 begin和end成员 begin和end操作产生指向容器内第一个元素和最后一个元素的下一个位置的迭代器,如下所示.这两个迭代器通常用于标记包含容器中所有元素的迭代范围. c.begin() 返回一个迭代器,它指向容器c的第一个元素 c.end() 返回一个迭代器,它指向容器c的最后一个元素的下一个位置 c.rbegin() 返回一个逆序迭代器,它指向容器c的最后一个元素 c.rend() 返回一个逆序迭代器,它指向容器c的第一个元素

Linux基础服务_DNS原理以及正反向DNS配置

DNS服务的原理介绍:         dns(Domain Name Service,域名解析服务)    为c/s架构的服务 通常默认的监听的端口为:53/tcp     53/udp 将dns服务实现的应用程序为:bind        (rpm包 )          DNS的树状结构:                                  根域为:.  tld:(Top Level Domain  顶级域)                         组织域:.com,

【ThinkingInJava】23、反向迭代器

/** * 书本:<Thinking In Java> * 功能:我们希望在默认的向前迭代器的基础上,添加产生反向迭代器的能力. * 文件:AdapterMethodIdiom.java * 时间:2015年4月8日19:59:01 * 作者:cutter_point */ package Lesson11holdingyourobjects; import java.util.*; class ReversibleArrayList<T> extends ArrayList<

【C++】反向迭代器(rbegin,rend)(转载)

转自:http://blog.csdn.net/kjing/article/details/6936325 rbegin和rend,很有用! C++ primer (中文版第四版)第273页 9.3.2 begin和end成员 begin和end操作产生指向容器内第一个元素和最后一个元素的下一个位置的迭代器,如下所示.这两个迭代器通常用于标记包含容器中所有元素的迭代范围. c.begin() 返回一个迭代器,它指向容器c的第一个元素 c.end() 返回一个迭代器,它指向容器c的最后一个元素的下

leetcode_67题——Add Binary(字符串string,反向迭代器reverse_iterator,栈stack)

Add Binary Total Accepted: 39288 Total Submissions: 158078My Submissions Question Solution Given two binary strings, return their sum (also a binary string). For example,a = "11"b = "1"Return "100". Hide Tags Math String Have

Nginx之(正)反向代理

在配置nginx反向代理之间我们得先准备两台测试服务器,Web1与Web2. 1.安装httpd 1 2 [[email protected] ~]# yum install -y httpd [[email protected] ~]# yum install -y httpd 2.提供测试页面 1 2 [[email protected] ~]# echo "<h1>web1.test.com</h1>" > /var/www/html/index.h

一元多项式的乘法与加法运算 【STL-map哈希-map反向迭代器遍历 + 零多项式】

设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格式: 输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数.数字间以空格分隔,但结尾不能有多余空格. 输入样例: 4 3 4 -5 2 6 1 -2 0 3 5 20 -7 4 3 1 输出样例: 15 24 -25 22 30 21 -10 20 -21 8 35 6

10.4 再探迭代器-插入/IO/反向

10.4.1 插入迭代器 插入迭代器接受一个容器,生成一个迭代器,通过向该迭代器赋值可以实现向容器添加元素 (1)back_inserter: 接受一个参数, 示例: auto iter = back_inserter(iVec): iter = value: (2)front_inserter: 接受一个参数, 示例: auto iter = front_inserter(iVec): iter = value: (3)inserter: 接受两个参数,示例:auto iter = inser