檔案給出了以下示例:
在陳述句中
for X in Y,Y 必須是一個迭代器或某個iter()可以為其創建迭代器的物件。這兩個陳述句是等價的:for i in iter(obj): print(i) for i in obj: print(i)
根據同一訊息來源,
在幕后,for 陳述句呼叫
iter()容器物件。該函式回傳一個迭代器物件,該物件定義了__next__()一次訪問容器中元素的方法。當沒有更多元素時,__next__()引發一個StopIteration例外,告訴 for 回圈終止。
考慮到這兩種情況,當 Y 是一個迭代器或某個 iter() 可以為其創建迭代器的物件時,
- 如果 Y 是可迭代的(有一個
iter()方法),則for陳述句呼叫此方法并回傳一個迭代器,該迭代器的next()方法用于迭代 Y 的每個元素。我假設這是上面的第二個示例。 - 如果 Y 是一個迭代器(同時有 an
iter()和next()method),for陳述句仍然呼叫該iter()方法,但是因為它是一個迭代器,它回傳它self,并且該next()方法被照常呼叫。我假設這是上面的第一個例子。
我的問題是,我的推理路線正確嗎?我不介意你是否指出對定義的任何誤用。
uj5u.com熱心網友回復:
請參閱https://docs.python.org/3/library/stdtypes.html#typeiter。
iterator.__iter__()回傳迭代器物件本身。這是允許容器和迭代器與 for 和 in 陳述句一起使用所必需的。此方法對應于 Python/C API 中 Python 物件的型別結構的 tp_iter 槽。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/353806.html
上一篇:格式問題
