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查看更多关于Pythonfor循环中in关键字含义是什么?的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did83249