gpt4 book ai didi

python - 为什么 and equivalent?

转载 作者:行者123 更新时间:2023-12-04 17:09:01 24 4
gpt4 key购买 nike

下面的例子是由documentation给出的:

In the statement for X in Y, Y must be an iterator or some object for which iter() can create an iterator. These two statements are equivalent:

for i in iter(obj):
print(i)

for i in obj:
print(i)

根据同样的 source ,

Behind the scenes, the for statement calls iter() on the container object. The function returns an iterator object that defines the method __next__() which accesses elements in the container one at a time. When there are no more elements, __next__() raises a StopIteration exception which tells the for loop to terminate.

考虑到这两种情况,当 Y 是迭代器或 iter() 可以为其创建迭代器的某个对象时,

  • 如果 Y 是一个可迭代的(有一个 iter() 方法),for 语句调用这个方法并返回一个迭代器,其 next() 方法用于遍历 Y 的每个元素。我假设这是上面的第二个示例。
  • 如果 Y 是一个迭代器(同时具有 iter()next() 方法),for 语句仍然调用 iter() 方法,但是因为它是一个迭代器,所以它返回它selfnext() 方法照常被调用。我假设这是上面的第一个例子。

我的问题是,我的推理是否正确?如果您指出任何对定义的误用,我不介意。

最佳答案

参见 https://docs.python.org/3/library/stdtypes.html#typeiter .

iterator.__iter__()

Return the iterator object itself. This isrequired to allow both containers and iterators to be used with thefor and in statements. This method corresponds to the tp_iter slot ofthe type structure for Python objects in the Python/C API.

关于python - 为什么 <for i 在 obj :> and <for i in iter(obj):> equivalent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69878958/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com