百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

你知道Python的for循环是如何工作的吗?

off999 2024-09-16 00:50 59 浏览 0 评论

大家都用过for循环,但是大家知道Python for循环背后的工作原理吗?本文就带大家详细探究Python for循环是如何工作的以及iterable和iterator的概念。

首先我们来看一下,如果不用for循环,是否还有其它的遍历方式。一种方法就是用类似C语言中通过索引进行访问:

colors = ["red", "green", "blue", "purple"]

i = 0

while i < len(colors):

print(colors[i])

i += 1

对于list这么做没问题,但是如果遍历对象是set就行不通了:

>>> colors = {"red", "green", "blue", "purple"}

>>> i = 0

>>> while i < len(colors):

... print(colors[i])

... i += 1

...

Traceback (most recent call last):

File "<stdin>", line 2, in <module>

TypeError: 'set' object does not support indexing

问题就出在,这种方法只能用在序列对象上,也就是能通过索引进行访问的数据结构,比如list,string,tuple等。但是对于dictionary,set这些非序列结构就无能为力了。

Iterable

在Python的世界中,一个iterable就是可以用过for循环进行遍历的对象。Iterable不一定具有索引,也不一定有长度,甚至不一定是有限长度的。

下面就是一个无限长的iterable的例子,它包含了所有5的倍数:

from itertools import count

multiples_of_five = count(step=5)

当我们用for对其进行遍历时,可以这样做:

for n in multiples_of_five:

if n > 100:

break

print(n)

如果我们把break去掉的话,这个循环就会永远进行下去。

Iterable和Iterator

我们知道iterable是什么了,但是它在Python中是如何工作的呢?

Python中有一个内建函数iter,任何iterable传进去都会获得其对应的iterator。

>>> iter(['some', 'list'])

<list_iterator object at 0x7f227ad51128>

>>> iter({'some', 'set'})

<set_iterator object at 0x7f227ad32b40>

>>> iter('some string')

<str_iterator object at 0x7f227ad51240>

然而iterator究竟是什么呢?简单地说,iterator只完成一个功能,那就是在遍历中返回下一个元素。

我们可以从任意iterable获取一个iterator:

>>> iterator = iter('hi')

然后利用next内建函数去获取下一个元素:

>>> next(iterator)

'h'

>>> next(iterator)

'i'

>>> next(iterator)

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

StopIteration

如果遍历结束了,即没有下一个元素了,next函数会抛出一个StopIteration异常。

Iterator同时也是iterable

将iterable传入iter函数可以得到一个iterator。同时,如果将一个iterator传入iter函数,得到的结果就是这个iterator本身。这意味着,iterator本身也是iterable。

>>> iterator = iter('hi')

>>> iterator2 = iter(iterator)

>>> iterator is iterator2

True

Iterator协议

在Python中,所有的iterator都遵循一套相同的协议:

1 一个iterable传入iter函数后可以得到对应的iterator。

2 iterator可以作为参数传入next函数,返回下一个元素或者抛出StopIteration异常。

3 当作iterator为参数传入iter函数时返回自身。

上述规则反过来也是成立的:

1 任何对象如果可以作为参数传入iter并且没有异常,则该对象是iterable。

2 任何对象如果可以作为参数传入next并且没有异常(StopIteration除外),则该对象是iterator。

3 任何传入iter并得到其自身的对象是iterator。

对iterator进行遍历

下面这段代码对一个iterable进行遍历,并打印其中的每一个元素:

def print_each(iterable):

iterator = iter(iterable)

while True:

try:

item = next(iterator)

except StopIteration:

break # Iterator exhausted: stop the loop

else:

print(item)

任意iterable都可以作为该函数的参数:

>>> print_each({1, 2, 3})

1

2

3

事实上,上面这段代码和下面使用for的代码是等价的:

def print_each(iterable):

for item in iterable:

print(item)

在for循环中Python会自动实现我们手工实现的功能:调用iter去获取下一个元素,直到遇到StopIteration异常。

这就是隐藏在Python for循环背后的秘密,小伙伴们,你们get到了吗?

相关推荐

笔记本电脑哪个牌子好用又实惠

1.神舟优雅X4优点:1.35kg很轻巧,14英寸够便携固态硬盘,速度快,有背光键盘。缺点:配置较低,只能轻度办公,售后一般。2.攀升MaxBookP1优点:零噪音,金属机身,固态硬盘,大触摸板,背...

电脑一开机就进入bios界面(电脑开机就会进入bios)

原因一:你的BIOS电池没有电了。解决方式:更换电池即可原因二:没有软驱但启用了软驱解决:可将软驱禁用——开机按DEL进BIOS,选择:STANDARDCMOSFEATURESDRIVEA:...

电脑windows7旗舰版怎么样(电脑windows7旗舰版好不好)

win7旗舰版挺好使的不过现在可以选择更win10。Windows7旗舰版属于微软公司开发的Windows7操作系统系统系列中的功能最高级的版本,也被叫做终结版本,是为了取代WindowsXP...

手机软件怎么升级最新版本呢
  • 手机软件怎么升级最新版本呢
  • 手机软件怎么升级最新版本呢
  • 手机软件怎么升级最新版本呢
  • 手机软件怎么升级最新版本呢
office2010老是弹出安装程序

没看到截图,最好是吧提示信息完整截图发上来。因为信息不会是仅仅“更改安装”几个字的。猜测是已经安装有Office2010了或原本的2010没有卸载干净。

win8玩游戏稳定吗(win8的游戏win10能玩吗)

1、确定驱动是最稳定的公版驱动,新驱动不一定适合游戏不要贸然升级。 2、确定电源已经设置为高性能模式。3、游戏过程开个游戏加加,可以自动为你切换独显,并且自动释放内存。也可以通过它注意下CPU占用,如...

win10系统更新版本(win10系统更新版本能回退吗)

win10怎么更新到1909版本win101909升级方法一:WindowsUpdate更新:1.依次点击开始—设置—更新和安全—windows更新—检查更新,需要更新补丁至最新,如果你经常不更新...

win7升级win10要留多少空间(windows7升级windows10需要多长时间)

win7电脑在系统已经激活并且开启系统更新的情况下,符合条件的系统会在右下角弹出windows10免费升级,直接点击确定就开始升级了。或者下载win10安助手,运行软件后会自动下载windows1...

国外比较开放的浏览器(国外比较开放的浏览器推荐)

1、打开控制面板。2、点击“检查防火墙状态”。3、点击左侧“高级设置”。4、选中“入栈规则”。5、右侧点击“新建规则”。6、选择“端口”。7、选择“TCP”,选中“特定端口”并输入你要开发的端口,或者...

一健ghost下载(一键ghost v2015.07.05)

你的是原版镜像,当然无法识别。。你可以使用微软usb工具。将镜像写入U盘或光盘。

纯净无毒的win7下载(有没有纯净的win7系统)

下面提供的是微软发布的Windows7各版本光盘ISO镜像下载地址,原始文件均来源自MSDN,和零-售彩盒版本光盘内容完全一致。请放心下载。(如果需要光盘的买家,请无视以下内容)下...

ie浏览器文件损坏怎么修复(ie浏览器破坏怎么恢复)

可以在浏览记录里面查到。重新下载一次就行了如果你在IE浏览器里面下载的文件被你不小心删掉了,而且这个文件对你来说很重要,你可以打开你的IE浏览器选择历史记录,在历史记录里面就可以找到相关的下载的地方,...

电脑没音量是什么原因(电脑没音量是什么原因造成的)

电脑突然没有声音可能是由于以下原因:1.音量设置被关闭或静音;2.音频驱动程序出现问题或需要更新;3.音频设备连接问题,例如音频插头没有插好或者有问题;4.操作系统的声音设置出现问题。解决方法包括检查...

电脑蓝屏u盘装系统教程(电脑蓝屏系统u盘怎么装系统)

dell电脑蓝屏用U盘重装系统方法,1在需要重装的电脑上插入启动U盘,开机并不断按下U盘启动快捷键。2在进入系统启动菜单中选择带有USB字样的选项并回车。3进入系统引导选项界面,选择Windows1...

系统之家官网纯净版(系统之家首页)

我现在用的就是系统之家的win7,以前用的是系统之家纯净版的xp,纯净版的好处就是没有预装的软件,缺点就是有些东西要自己装,包括有些软件必须的东西。装个游戏又要装这个又要装那个的很麻烦,我现在都是安装...

取消回复欢迎 发表评论: