怎么理解python循环_不是很理解这段python for循环的原理

本文详细解释了for循环的工作原理,通过实例讲解了`for i in range(90, 0, -1)`和`for string in strings`的含义,揭示了迭代器和iterable的概念,展示了如何使用迭代器遍历range和字符串。
摘要由CSDN通过智能技术生成

看了几个例子,不太理解for循环的工作原理,例如:

for i in range(90,0,-1)

这个是不是就是表示,i从90开始算起,一直算到0结束(不考虑是否满足条件)

for string in strings

这个没理解什么意思。

想问下,for循环的工作原理是什么样的,请指导。

如果你从迭代层面来理解的话可能对于for的工作原理会有更深的理解。

首先我们来使用dir查看一下对于range、str这两个的不一样的类型有什么共同点。>>> dir(range)

['__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__',

'__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__',

'__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',

'__repr__', '__reversed__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',

'count', 'index', 'start', 'step', 'stop']

>>> dir(str)

['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__',

'__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__',

'__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__',

'__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__',

'__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold',

'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map',

'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower',

'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower',

'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition',

'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title',

'translate', 'upper', 'zfill']

查看这两个的共有属性

>>> set(dir(range)) & set(dir(str))

{'__hash__', '__eq__', '__contains__', '__iter__', '__getitem__', 'count', '__lt__',

'__dir__', '__le__', '__subclasshook__', '__ge__', '__sizeof__', '__format__', '__len__',

'__ne__', '__getattribute__', '__delattr__', '__reduce_ex__', '__gt__', '__reduce__',

'__setattr__', '__doc__', '__class__', '__new__', '__repr__', '__init__', 'index', '__str__'}

我们关注__iter__属性,他们两个都有这个函数,如果你查看其他可以使用for循环迭代的对象,你都可以发现这个特殊方法。

实现了这个方法的对象我们称之为iterable。

我们把对象传给Python内置的iter()方法,会返回一个迭代器,for循环就是使用这个模式来实现适用于所有的对象。

比如:>>> iter([1, 2])

>>> iter(range(0, 10))

>>> iter("abc")

>>>

iter函数返回的对象我们称之为iterator,iterator只需要做一件事,那就是调用next(iterator)方法,返回下一个元素。

举例:>>> t = iter("abc")

>>> next(t)

'a'

>>> next(t)

'b'

>>> next(t)

'c'

>>> next(t)

Traceback (most recent call last):

File "", line 1, in

StopIteration

当迭代器再没有元素可以迭代时会引发一个异常。

那么在这里我给出itrable和iterator的定义。

iterable:

可以传给iter并返回一个iteratot的对象

iterator:

可以传给next函数并返回下一个迭代元素的对象,并在迭代结束引发一个异常。

因此,对于你提的例子我们使用迭代器来重新定义一下。>>> t = iter(range(90, 0, -1))

>>> t

>>> next(t)

90

>>> next(t)

89

>>> next(t)

88

如果你看完答案,能明白的话,请给我反馈一下,谢谢。

第一个就是遍历range得到的数字集合,

第二个就是遍历strings这个集合

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/wenda/wd14071.html

相关文章 Recommend

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值