安迪_963

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

内置的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))]

 

 

posted on 2017-06-11 13:13  Andy_963  阅读(169)  评论(0编辑  收藏  举报