带iterable的Python for循环是如何工作的?
feed.entry中的party的带iterable的Python for循环是如何工作的?,python,for-loop,iterable,Python,For Loop,Iterable,feed.entry中的party的表示什么?for循环实际如何工作 for party in feed.entry: print(party.location.address.text) (我习惯C++的循环样式,但Python循环让我困惑)。 Fo..Enter是允许迭代的东西,包含某种类型的对象。这与c++大致相似: for (feed::iterator party = feed.entry.begin(); party != feed.entry.end(); ++party
表示什么?for循环实际如何工作
for party in feed.entry:
print(party.location.address.text)
(我习惯C++的循环样式,但Python循环让我困惑)。
Fo..Enter是允许迭代的东西,包含某种类型的对象。这与c++大致相似:
for (feed::iterator party = feed.entry.begin(); party != feed.entry.end(); ++party) {
cout << (*party).location.address.text;
}
for(feed::iterator party=feed.entry.begin();party!=feed.entry.end();++party){
coutfeed.entry是feed的属性,它的值是(如果不是,此代码将失败)实现迭代协议的对象(例如,数组),并且具有iter方法,该方法返回迭代器对象
迭代器有next()方法,返回下一个元素或引发异常,因此python for循环实际上是:
iterator = feed.entry.__iter__()
while True:
try:
party = iterator.next()
except StopIteration:
# StopIteration exception is raised after last element
break
# loop code
print party.location.address.text
party只需在iterable提要上迭代。条目
看看解释。在Python中,bucles与C/C++不同,它们最像PHP的foreach。您所做的不是像在一段时间内使用“(initialization;condition;increment)”那样迭代,它只是在列表中的每个元素上迭代(字符串类似于列表)
例如:
for number in range(5):
print number
将输出
0
1
2
3
4
要将我的0.05美元添加到前面的答案中,您可能还需要查看
Python的for
循环与迭代器一起工作,迭代器必须实现迭代器协议。有关更多详细信息,请参阅:
我只是想为新手提供一个更一般的解释
语法上,for
的循环看起来像
for <name to be assigned to> in <some sequence>:
<block of code, optionally referencing the name>
你也可以在赋值部分解包参数。用同样的方法,你可以做像
a, b = 1, 2
for a, b in [(1, 2), (3, 4), (5, 6)]: print(a + b)
…你也可以做像
a, b = 1, 2
for a, b in [(1, 2), (3, 4), (5, 6)]: print(a + b)
…它打印
3
7
11
Python中的A总是在--上运行,这意味着它可以在其项上提供一个。for
语句依次获取,将其分配给目标名称,并使用该名称运行套件(“正文”)
# |name| |iterable|
for party in feed.entry:
# body...
print(party.location.address.text)
在本例中,feed.entry
是iterable,party
是目标名称,print…
是套件。iterator由for
语句自动请求,并保存迭代状态,例如,如果iterable是列表,则保存下一个元素的索引
如果你来自C++,一个经典的表示:迭代状态<代码> i>代码>被保存在可迭代的外部。这对应于Python的<代码>,而<代码>循环:
# for (int i = 0; i < 10; ++i)
i = 0
while i < 10:
i += 1
# access the state of an iterable here
(请注意,从\uuuu iterating=True
到\uuuu iterating=False
的整个块对于包含的范围是不“可见”的。实现使用各种优化,例如CPython)
for
语句只定义了iterable和iterator的使用方式。如果您对外部迭代比较熟悉,那么它也有助于了解iterable和iterator
iter(iterable)
调用已经完成-这就好像iter
对于各种结构类型都是重载的
- 如果定义了
type(iterable)。\uuu iter\uuu
,则将其作为方法调用,并将结果用作迭代器
- 如果定义了
type(iterable)。\uuu getitem\uuuuuuuuuuuu
,则它由一个泛型迭代器类型包装,该迭代器类型返回iterable[0]
,iterable[1]
,并在索引时引发索引器时引发停止迭代
无论哪种方式,iter
返回或引发TypeError
。迭代器是定义\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
(用于重用)和\uuuuuuuuuuu。通常,迭代器是可以保存状态以计算\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
项的对象。例如,列表迭代器对应于此对象:
class ListIterator:
"""Python equivalent of ``iter(:list)``"""
# iterator holds iteration state - e.g. iterable and current index
def __init__(self, iterable: list):
self.iterable = iterable
self.index = 0
# __next__ fetches item and advances iteration state - e.g. index += 1
def __next__(self):
# attempt to produce an item
try:
item = self.iterable[self.index]
except IndexError: # translate indexing protocol to iteration protocol
raise StopIteration
# update iteration state
self.index += 1
return item
# iterators can be iterated on in ``for`` statements etc.
def __iter__(self):
return self
(请注意,人们会习惯性地将这样一个对象写为a。)
索引列表或增加某个指针只是iterable/iterator协议的一个非常基本的示例。例如,迭代器可以是无状态的,并使用random.random()
在\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>中生成无限的随机数流。迭代器还可以保存外部信息的状态,并以迭代方式遍历文件系统。如果我没记错的话,这是python的使用年限(2.0之前的版本)(使用length(),[]和counter)不一定是列表。最好称之为iterable。是的。但这似乎是一个初学者问题。我想让回答保持简单。字符串不是列表。字符串是iterable,列表也是,但字符串和列表在Python中肯定是两种不同的类型。嗯,在许多语言中,字符串是字符数组,在Python中是字符串迭代时的行为非常相似…编辑…是的,字符串和列表在迭代时非常相似,但在许多其他情况下非常不同。例如,您不能修改字符串。+1,因为给出等效的低级代码通常是最好的解释;希望我只给出+0.9,因为第一行应该是iter(feed.entry)
(大多数情况下,当您直接调用一个特殊方法而不是通过一个内置的方法时,您是在错误地调用它,尽管也有例外;-)请注意,在Python 3中,魔法<代码> NeX//Cord>方法现在被称为“代码>”,“NEXTXYX
feed。或者在使用C++之前,设置所有笨拙的C++脚手架()。
class ListIterator:
"""Python equivalent of ``iter(:list)``"""
# iterator holds iteration state - e.g. iterable and current index
def __init__(self, iterable: list):
self.iterable = iterable
self.index = 0
# __next__ fetches item and advances iteration state - e.g. index += 1
def __next__(self):
# attempt to produce an item
try:
item = self.iterable[self.index]
except IndexError: # translate indexing protocol to iteration protocol
raise StopIteration
# update iteration state
self.index += 1
return item
# iterators can be iterated on in ``for`` statements etc.
def __iter__(self):
return self