for in在python中什么意思_Python for 循环中 in 关键字含义是什么?

最常用的情况下,我理解,比如

for i in range(1, 5):

print i

回复内容:

关键词:迭代器

简单来说,for in 语句是一个语法糖,具体是这样的:

调用一个对象的 __iter__ 方法,方法会返回一个迭代器,所谓迭代器就是实现了 __next__ 方法的对象,如果一个对象本身就实现了 __next__(Python 2 中是直接 “next” 方法,没有下划线) ,可以直接返回自身。

调用迭代器的 __next__ 返回迭代器中的“下一个”元素,比如说第一次调用会返回 0,第二次会返回 1,如此这般。

最后没有元素了,迭代器抛出一个异常来表明自己没有元素了。for 语句会捕获这个异常并停下来。我建议你独立写一个斐波那契的迭代器。

whitedot.jpgMac 怎么让截图变正常大小啊 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

迭代器。

whitedot.jpg

用dis转成虚拟机的指令

whitedot.jpg发现就是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

article_wechat2021.jpg?1111

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

相关文章

相关视频

网友评论

文明上网理性发言,请遵守 新闻评论服务协议我要评论

user_avatar.jpg

立即提交

专题推荐5d1ef1e9e866e635.jpg独孤九贱-php全栈开发教程

全栈 100W+

主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门

5d1ef236ca878949.jpg玉女心经-web前端开发教程

入门 50W+

主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门

5d1ef2477c7d7587.jpg天龙八部-实战开发教程

实战 80W+

主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值