最常用的情况下,我理解,比如
for i in range(1, 5):
print i
回复内容:
关键词:迭代器简单来说,for in 语句是一个语法糖,具体是这样的:调用一个对象的 __iter__ 方法,方法会返回一个迭代器,所谓迭代器就是实现了 __next__ 方法的对象,如果一个对象本身就实现了 __next__(python 2 中是直接 “next” 方法,没有下划线) ,可以直接返回自身。调用迭代器的 __next__ 返回迭代器中的“下一个”元素,比如说第一次调用会返回 0,第二次会返回 1,如此这般。最后没有元素了,迭代器抛出一个异常来表明自己没有元素了。for 语句会捕获这个异常并停下来。我建议你独立写一个斐波那契的迭代器。mac 怎么让截图变正常大小啊 qaq另外,还有一个销魂的东西叫做生成器,演示一下如何优雅地斐波那契:(此后的代码为了简洁我都用 python 3 来写,用 python 2 能运行但是性能糟糕。)
def fib(n):
a = 0
b = 1
for _ in range(n):
a, b = b, a+b
yield a
谢邀。刚看到问题以为楼主要问in是什么意思。这个for实际上就是迭代,使用的是迭代器(iterator)。
# 以下代码在python 2中运行
for row in f:
print row
# 完全等价于
itr = f.__iter__() # 获得新的迭代器
while true:
try:
row = itr.next()
except stopiteration:
break
print row
迭代器。将用dis转成虚拟机的指令发现就是get_iter, for_iter之类发现就是get_iter, for_iter之类
这都是把range(1:5)和f当成容器来看。文件f既然有行,那row自然是字符串了。
就个人理解:in 关键字实现了一套python中的遍历协议.协议a: __iter__ + next循环时, 程序先使用__iter__ (相当于iter(instance))获取具有next方法的对象, 然后通过其返回的对象, 不断调用其next方法, 直到stopiteration错误抛出.
class a:
def __iter__(self):
self.limit = 4
self.times = 0
self.init = 1
return self
def next(self):
if self.times >= self.limit:
raise stopiteration()
else:
x = self.init
self.times += 1
self.init += 1
return x
print ‘a>>>>>>’
for x in a():
print x